# HG changeset patch # User Edward Nevill # Date 1420797900 0 # Node ID e9e3fcbb11f98405998791f6f965da54cdfc3834 # Parent 5ad4c09169742e076305193c1e0b8256635cf33e Fix guarantee failure in syncronizer.cpp diff -r 5ad4c0916974 -r e9e3fcbb11f9 src/cpu/aarch64/vm/aarch64.ad --- a/src/cpu/aarch64/vm/aarch64.ad Thu Dec 11 16:42:03 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); }