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) {
126 oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
127 }
128
129 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
130 return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
131 }
132
133 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
134 return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
135 }
136 };
137 };
138
139 template<>
140 struct BarrierSet::GetName<CardTableBarrierSet> {
141 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
142 };
143
144 template<>
145 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
146 typedef ::CardTableBarrierSet type;
147 };
148
149 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|
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 private:
123 // Failing checkcast or check null during copy, still needs barrier
124 template <typename T>
125 static inline void oop_arraycopy_partial_barrier(BarrierSetT *bs, T* dst_raw, T* p);
126 public:
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) {
131 oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
132 }
133
134 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
135 return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
136 }
137
138 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
139 return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
140 }
141
142 static void value_copy_in_heap(const ValuePayload& src, const ValuePayload& dst);
143 static void value_store_null_in_heap(const ValuePayload& dst);
144 };
145 };
146
147 template<>
148 struct BarrierSet::GetName<CardTableBarrierSet> {
149 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
150 };
151
152 template<>
153 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
154 typedef ::CardTableBarrierSet type;
155 };
156
157 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|