1.1 --- a/src/share/vm/memory/cardTableModRefBS.hpp Sat Oct 06 10:25:04 2018 +0100 1.2 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Thu Dec 27 11:43:33 2018 +0800 1.3 @@ -316,6 +316,9 @@ 1.4 1.5 inline void inline_write_ref_array(MemRegion mr) { 1.6 dirty_MemRegion(mr); 1.7 +#ifdef MIPS 1.8 + if (UseSyncLevel >= 2000) OrderAccess::fence(); 1.9 +#endif 1.10 } 1.11 protected: 1.12 void write_ref_array_work(MemRegion mr) { 1.13 @@ -329,7 +332,11 @@ 1.14 1.15 // *** Card-table-barrier-specific things. 1.16 1.17 - template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) {} 1.18 + template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) { 1.19 +#ifdef MIPS 1.20 + if (UseSyncLevel >= 2000) OrderAccess::fence(); 1.21 +#endif 1.22 + } 1.23 1.24 template <class T> inline void inline_write_ref_field(T* field, oop newVal, bool release) { 1.25 jbyte* byte = byte_for((void*)field); 1.26 @@ -339,6 +346,9 @@ 1.27 } else { 1.28 *byte = dirty_card; 1.29 } 1.30 +#ifdef MIPS 1.31 + if (UseSyncLevel >= 2000) OrderAccess::fence(); 1.32 +#endif 1.33 } 1.34 1.35 // These are used by G1, when it uses the card table as a temporary data