< 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 >