--- old/src/share/vm/opto/parse3.cpp 2014-11-21 12:09:26.716614026 -0500 +++ new/src/share/vm/opto/parse3.cpp 2014-11-21 12:09:26.506632623 -0500 @@ -283,7 +283,9 @@ // If reference is volatile, prevent following memory ops from // floating down past the volatile write. Also prevents commoning // another volatile read. - if (is_vol) insert_mem_bar(Op_MemBarRelease); + if (is_vol) { + insert_mem_bar(UseBarriersForVolatile ? Op_MemBarRelease : Op_MemBarCPUOrder); + } // Compute address and memory type. int offset = field->offset_in_bytes(); @@ -325,7 +327,7 @@ if (is_vol) { // If not multiple copy atomic, we do the MemBarVolatile before the load. if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { - insert_mem_bar(Op_MemBarVolatile); // Use fat membar + insert_mem_bar(UseBarriersForVolatile ? Op_MemBarVolatile : Op_MemBarCPUOrder); // Use fat membar } // Remember we wrote a volatile field. // For not multiple copy atomic cpu (ppc64) a barrier should be issued