86 virtual void write_ref_array_pre(oop* dst, size_t length,
87 bool dest_uninitialized) {}
88 virtual void write_ref_array_pre(narrowOop* dst, size_t length,
89 bool dest_uninitialized) {}
90 // Below count is the # array elements being written, starting
91 // at the address "start", which may not necessarily be HeapWord-aligned
92 inline void write_ref_array(HeapWord* start, size_t count);
93
94 CardTable* card_table() { return _card_table.load_relaxed(); }
95 CardTable* card_table() const { return _card_table.load_relaxed(); }
96
97 CardValue* card_table_base_const() const {
98 assert(UseSerialGC || UseParallelGC, "Only these GCs have constant card table base");
99 return card_table()->byte_map_base();
100 }
101
102 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
103
104 virtual void print_on(outputStream* st) const;
105
106 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
107 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
108 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
109
110 public:
111 template <typename T>
112 static void oop_store_in_heap(T* addr, oop value);
113 template <typename T>
114 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
115 template <typename T>
116 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
117
118 template <typename T>
119 static OopCopyResult oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
120 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
121 size_t length);
122
123 static void clone_in_heap(oop src, oop dst, size_t size);
124
125 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
|
86 virtual void write_ref_array_pre(oop* dst, size_t length,
87 bool dest_uninitialized) {}
88 virtual void write_ref_array_pre(narrowOop* dst, size_t length,
89 bool dest_uninitialized) {}
90 // Below count is the # array elements being written, starting
91 // at the address "start", which may not necessarily be HeapWord-aligned
92 inline void write_ref_array(HeapWord* start, size_t count);
93
94 CardTable* card_table() { return _card_table.load_relaxed(); }
95 CardTable* card_table() const { return _card_table.load_relaxed(); }
96
97 CardValue* card_table_base_const() const {
98 assert(UseSerialGC || UseParallelGC, "Only these GCs have constant card table base");
99 return card_table()->byte_map_base();
100 }
101
102 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
103
104 virtual void print_on(outputStream* st) const;
105
106 // The AOT code cache manager needs to know the current card shift
107 // and, for some barrier sets, the region grain size shift
108 uint card_shift() const { return card_table()->card_shift(); }
109 virtual uint grain_shift() { return 0; }
110
111 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
112 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
113 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
114
115 public:
116 template <typename T>
117 static void oop_store_in_heap(T* addr, oop value);
118 template <typename T>
119 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
120 template <typename T>
121 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
122
123 template <typename T>
124 static OopCopyResult oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
125 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
126 size_t length);
127
128 static void clone_in_heap(oop src, oop dst, size_t size);
129
130 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
|