331 } |
331 } |
332 |
332 |
333 // *** Card-table-barrier-specific things. |
333 // *** Card-table-barrier-specific things. |
334 |
334 |
335 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) { |
335 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) { |
336 #ifdef MIPS64 |
336 #ifdef MIPS |
337 if (UseSyncLevel >= 2000) OrderAccess::fence(); |
337 if (UseSyncLevel >= 2000) OrderAccess::fence(); |
338 #endif |
338 #endif |
339 } |
339 } |
340 |
340 |
341 template <class T> inline void inline_write_ref_field(T* field, oop newVal, bool release) { |
341 template <class T> inline void inline_write_ref_field(T* field, oop newVal, bool release) { |
344 // Perform a releasing store if requested. |
344 // Perform a releasing store if requested. |
345 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
345 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
346 } else { |
346 } else { |
347 *byte = dirty_card; |
347 *byte = dirty_card; |
348 } |
348 } |
349 #ifdef MIPS64 |
349 #ifdef MIPS |
350 if (UseSyncLevel >= 2000) OrderAccess::fence(); |
350 if (UseSyncLevel >= 2000) OrderAccess::fence(); |
351 #endif |
351 #endif |
352 } |
352 } |
353 |
353 |
354 // These are used by G1, when it uses the card table as a temporary data |
354 // These are used by G1, when it uses the card table as a temporary data |