changeset 6038:0a377d9c35cd

Fix guarantee failure in syncronizer.cpp
author Edward Nevill <ed@camswl.com>
date Fri, 09 Jan 2015 10:05:00 +0000
parents a685a32270c3
children 219b0a7f15b6
files src/cpu/aarch64/vm/aarch64.ad
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/aarch64.ad	Tue Dec 30 21:41:20 2014 +0000
+++ b/src/cpu/aarch64/vm/aarch64.ad	Fri Jan 09 10:05:00 2015 +0000
@@ -2950,7 +2950,8 @@
       __ ldxr(tmp, oop);
       __ cmp(tmp, disp_hdr);
       __ br(Assembler::NE, cas_failed);
-      __ stxr(tmp, box, oop);
+      // use stlxr to ensure update is immediately visible
+      __ stlxr(tmp, box, oop);
       __ cbzw(tmp, cont);
       __ b(retry_load);
     }
@@ -2999,7 +3000,8 @@
 	__ ldxr(rscratch1, tmp);
 	__ cmp(disp_hdr, rscratch1);
 	__ br(Assembler::NE, fail);
-	__ stxr(rscratch1, rthread, tmp);
+        // use stlxr to ensure update is immediately visible
+	__ stlxr(rscratch1, rthread, tmp);
 	__ cbnzw(rscratch1, retry_load);
 	__ bind(fail);
       }
@@ -3087,7 +3089,8 @@
 	__ ldxr(tmp, oop);
 	__ cmp(box, tmp);
 	__ br(Assembler::NE, cas_failed);
-	__ stxr(tmp, disp_hdr, oop);
+        // use stlxr to ensure update is immediately visible
+	__ stlxr(tmp, disp_hdr, oop);
 	__ cbzw(tmp, cont);
 	__ b(retry_load);
       }