< prev index next >
src/share/vm/gc/shared/cardTableModRefBS.inline.hpp
Print this page
rev 12906 : [mq]: gc_interface
@@ -23,20 +23,21 @@
*/
#ifndef SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP
#define SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP
+#include "gc/shared/cardTable.hpp"
#include "gc/shared/cardTableModRefBS.hpp"
-#include "oops/oopsHierarchy.hpp"
-#include "runtime/orderAccess.inline.hpp"
-template <class T> inline void CardTableModRefBS::inline_write_ref_field(T* field, oop newVal, bool release) {
- jbyte* byte = byte_for((void*)field);
- if (release) {
- // Perform a releasing store if requested.
- OrderAccess::release_store((volatile jbyte*) byte, dirty_card);
+template <DecoratorSet decorators>
+inline void CardTableModRefBS::write_ref_field_post(void* field, oop newVal) {
+ CardTable *const card_table = _card_table;
+ jbyte* byte = card_table->byte_for((void*)field);
+ if (DecoratorTest<decorators>::HAS_MO_VOLATILE || card_table->scanned_concurrently()) {
+ // Perform a releasing store if required.
+ RawAccess<MO_RELEASE>::store(byte, CardTable::dirty_card_val());
} else {
- *byte = dirty_card;
+ RawAccess<MO_RELAXED>::store(byte, CardTable::dirty_card_val());
}
}
#endif // SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP
< prev index next >