aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraph <none@none>2014-08-20 10:56:55 -0400
committeraph <none@none>2014-08-20 10:56:55 -0400
commite428155dd6b8690adebf6f09b0a8d8ebf06aae69 (patch)
tree810e057d0bc66c527f7ab1c93669ad84fe778a8b
parentc21faaf602e6e0f296d6dcef5cc1f03c573f6a98 (diff)
A more efficient sequence for C1_MacroAssembler::float_cmp.
-rw-r--r--src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp
index 8f23a6685..0d16384e7 100644
--- a/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp
+++ b/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp
@@ -50,21 +50,14 @@ void C1_MacroAssembler::float_cmp(bool is_float, int unordered_result,
if (unordered_result < 0) {
// we want -1 for unordered or less than, 0 for equal and 1 for
// greater than.
- mov(result, (u_int64_t)-1L);
- // for FP LT tests less than or unordered
- br(Assembler::LT, done);
- // install 0 for EQ otherwise 1
- csinc(result, zr, zr, Assembler::EQ);
+ cset(result, NE); // Not equal or unordered
+ cneg(result, result, LT); // Less than or unordered
} else {
// we want -1 for less than, 0 for equal and 1 for unordered or
// greater than.
- mov(result, 1L);
- // for FP HI tests greater than or unordered
- br(Assembler::HI, done);
- // install 0 for EQ otherwise ~0
- csinv(result, zr, zr, Assembler::EQ);
+ cset(result, NE); // Not equal or unordered
+ cneg(result, result, LO); // Less than
}
- bind(done);
}
int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr, Register scratch, Label& slow_case) {