[aarch64-port-dev ] A more efficient sequence for C1_MacroAssembler::float_cmp.
Andrew Haley
aph at redhat.com
Wed Aug 20 14:58:11 UTC 2014
A minor improvement; removes a branch.
Andrew.
# HG changeset patch
# User aph
# Date 1408546615 14400
# Wed Aug 20 10:56:55 2014 -0400
# Node ID 4a1e593ddb9e9e7317f9aa416a2b478d336fe334
# Parent d9857f115ab3b7355883e25956cf085ee8d980bd
A more efficient sequence for C1_MacroAssembler::float_cmp.
diff -r d9857f115ab3 -r 4a1e593ddb9e src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp Wed Aug 20 10:55:48 2014 -0400
+++ b/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp Wed Aug 20 10:56:55 2014 -0400
@@ -50,21 +50,14 @@
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) {
More information about the aarch64-port-dev
mailing list