327 return is_card_aligned(addr); |
330 return is_card_aligned(addr); |
328 } |
331 } |
329 |
332 |
330 // *** Card-table-barrier-specific things. |
333 // *** Card-table-barrier-specific things. |
331 |
334 |
332 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 |
|
337 if (Use3A2000) OrderAccess::fence(); |
|
338 #endif |
|
339 } |
333 |
340 |
334 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) { |
335 jbyte* byte = byte_for((void*)field); |
342 jbyte* byte = byte_for((void*)field); |
336 if (release) { |
343 if (release) { |
337 // Perform a releasing store if requested. |
344 // Perform a releasing store if requested. |
338 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
345 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
339 } else { |
346 } else { |
340 *byte = dirty_card; |
347 *byte = dirty_card; |
341 } |
348 } |
|
349 #ifdef MIPS64 |
|
350 if (Use3A2000) OrderAccess::fence(); |
|
351 #endif |
342 } |
352 } |
343 |
353 |
344 // 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 |
345 // structure for card claiming. |
355 // structure for card claiming. |
346 bool is_card_dirty(size_t card_index) { |
356 bool is_card_dirty(size_t card_index) { |