--- a/hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Tue Jan 20 15:24:58 2015 -0800
+++ b/hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Wed Jan 21 14:38:48 2015 -0800
@@ -1845,7 +1845,8 @@
// Now set thread in native
__ mov(rscratch1, _thread_in_native);
- __ str(rscratch1, Address(rthread, JavaThread::thread_state_offset()));
+ __ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset()));
+ __ stlrw(rscratch1, rscratch2);
{
int return_type = 0;
@@ -1902,7 +1903,8 @@
// Thread A is resumed to finish this native method, but doesn't block here since it
// didn't see any synchronization is progress, and escapes.
__ mov(rscratch1, _thread_in_native_trans);
- __ str(rscratch1, Address(rthread, JavaThread::thread_state_offset()));
+ __ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset()));
+ __ stlrw(rscratch1, rscratch2);
if(os::is_MP()) {
if (UseMembar) {
@@ -1966,7 +1968,8 @@
// change thread state
__ mov(rscratch1, _thread_in_Java);
- __ str(rscratch1, Address(rthread, JavaThread::thread_state_offset()));
+ __ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset()));
+ __ stlrw(rscratch1, rscratch2);
__ bind(after_transition);
Label reguard;