320 return is_card_aligned(addr); |
323 return is_card_aligned(addr); |
321 } |
324 } |
322 |
325 |
323 // *** Card-table-barrier-specific things. |
326 // *** Card-table-barrier-specific things. |
324 |
327 |
325 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) {} |
328 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal) { |
|
329 #ifdef MIPS64 |
|
330 if (Use3A2000) OrderAccess::fence(); |
|
331 #endif |
|
332 } |
326 |
333 |
327 template <class T> inline void inline_write_ref_field(T* field, oop newVal, bool release) { |
334 template <class T> inline void inline_write_ref_field(T* field, oop newVal, bool release) { |
328 jbyte* byte = byte_for((void*)field); |
335 jbyte* byte = byte_for((void*)field); |
329 if (release) { |
336 if (release) { |
330 // Perform a releasing store if requested. |
337 // Perform a releasing store if requested. |
331 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
338 OrderAccess::release_store((volatile jbyte*) byte, dirty_card); |
332 } else { |
339 } else { |
333 *byte = dirty_card; |
340 *byte = dirty_card; |
334 } |
341 } |
|
342 #ifdef MIPS64 |
|
343 if (Use3A2000) OrderAccess::fence(); |
|
344 #endif |
335 } |
345 } |
336 |
346 |
337 // These are used by G1, when it uses the card table as a temporary data |
347 // These are used by G1, when it uses the card table as a temporary data |
338 // structure for card claiming. |
348 // structure for card claiming. |
339 bool is_card_dirty(size_t card_index) { |
349 bool is_card_dirty(size_t card_index) { |