< prev index next >

src/hotspot/share/gc/shared/modRefBarrierSet.hpp

rename things

8198949_arraycopy
 
 class Klass;
 
 class ModRefBarrierSet: public BarrierSet {
 protected:
-  ModRefBarrierSet(const BarrierSet::FakeRtti& fake_rtti)
-    : BarrierSet(fake_rtti.add_tag(BarrierSet::ModRef)) { }
+  ModRefBarrierSet(BarrierSetAssembler* barrier_set_assembler,
+                   const BarrierSet::FakeRtti& fake_rtti)
+    : BarrierSet(barrier_set_assembler,
+                 fake_rtti.add_tag(BarrierSet::ModRef)) { }
   ~ModRefBarrierSet() { }
 
 public:
   template <DecoratorSet decorators, typename T>
   inline void write_ref_field_pre(T* addr) {}

@@ -45,10 +47,26 // Causes all refs in "mr" to be assumed to be modified. virtual void invalidate(MemRegion mr) = 0; virtual void write_region(MemRegion mr) = 0; + // Operations on arrays, or general regions (e.g., for "clone") may be + // optimized by some barriers. + + // Below length is the # array elements being written + virtual void write_ref_array_pre(oop* dst, size_t length, + bool dest_uninitialized = false) {} + virtual void write_ref_array_pre(narrowOop* dst, size_t length, + bool dest_uninitialized = false) {} + // Below count is the # array elements being written, starting + // at the address "start", which may not necessarily be HeapWord-aligned + inline void write_ref_array(HeapWord* start, size_t count); + + protected: + virtual void write_ref_array_work(MemRegion mr) = 0; + + public: // The ModRef abstraction introduces pre and post barriers template <DecoratorSet decorators, typename BarrierSetT> class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> { typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
< prev index next >