[aarch64-port-dev ] openjdk atomics
Andrew Haley
aph at redhat.com
Tue Feb 18 08:10:26 PST 2014
OK?
Andrew.
diff -r 9358a801c67a src/cpu/aarch64/vm/aarch64.ad
--- a/src/cpu/aarch64/vm/aarch64.ad Fri Feb 14 16:25:23 2014 +0000
+++ b/src/cpu/aarch64/vm/aarch64.ad Tue Feb 18 16:09:50 2014 +0000
@@ -2414,13 +2414,8 @@
__ ldxr(rscratch1, addr_reg);
__ cmp(rscratch1, old_reg);
__ br(Assembler::NE, done);
- // if we store+flush with no intervening write tmp will be zero
__ stxr(rscratch1, new_reg, addr_reg);
- __ cmpw(rscratch1, zr); // cannot use cbzw as must set flag
- __ br(Assembler::EQ, done);
- // retry so we only ever return after a load fails to compare
- // ensures we don't return a stale value after a failed write.
- __ b(retry_load);
+ __ cbnzw(rscratch1, retry_load);
__ bind(done);
__ membar(__ AnyAny);
%}
@@ -2460,13 +2455,8 @@
__ ldxrw(rscratch1, addr_reg);
__ cmpw(rscratch1, old_reg);
__ br(Assembler::NE, done);
- // if we store+flush with no intervening write tmp wil be zero
__ stxrw(rscratch1, new_reg, addr_reg);
- __ cmpw(rscratch1, zr); // cannot use cbzw as must set flag
- __ br(Assembler::EQ, done);
- // retry so we only ever return after a load fails to compare
- // ensures we don't return a stale value after a failed write.
- __ b(retry_load);
+ __ cbnzw(rscratch1, retry_load);
__ bind(done);
__ membar(__ AnyAny);
%}
diff -r 9358a801c67a src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Fri Feb 14 16:25:23 2014 +0000
+++ b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Tue Feb 18 16:09:50 2014 +0000
@@ -1579,8 +1579,8 @@
Label retry_load, nope;
// flush and load exclusive from the memory location
// and fail if it is not what we expect
+ __ membar(__ AnyAny);
__ bind(retry_load);
- __ membar(__ AnyAny);
__ ldxrw(rscratch1, addr);
__ cmpw(rscratch1, cmpval);
__ cset(rscratch1, Assembler::NE);
More information about the aarch64-port-dev
mailing list