diff -r 1f822ff877d1 -r 73d689add964 src/share/vm/memory/cardTableModRefBS.hpp --- a/src/share/vm/memory/cardTableModRefBS.hpp Sat Oct 06 10:25:04 2018 +0100 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Thu Dec 27 11:43:33 2018 +0800 @@ -316,6 +316,9 @@ inline void inline_write_ref_array(MemRegion mr) { dirty_MemRegion(mr); +#ifdef MIPS + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif } protected: void write_ref_array_work(MemRegion mr) { @@ -329,7 +332,11 @@ // *** Card-table-barrier-specific things. - template inline void inline_write_ref_field_pre(T* field, oop newVal) {} + template inline void inline_write_ref_field_pre(T* field, oop newVal) { +#ifdef MIPS + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif + } template inline void inline_write_ref_field(T* field, oop newVal, bool release) { jbyte* byte = byte_for((void*)field); @@ -339,6 +346,9 @@ } else { *byte = dirty_card; } +#ifdef MIPS + if (UseSyncLevel >= 2000) OrderAccess::fence(); +#endif } // These are used by G1, when it uses the card table as a temporary data