160 template <typename T>
161 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value);
162 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value);
163
164 template <typename T>
165 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr);
166 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset);
167
168 template <typename T>
169 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
170 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
171 size_t length);
172
173 // Clone barrier support
174 static void clone_in_heap(oop src, oop dst, size_t size);
175
176 // Needed for loads on non-heap weak references
177 template <typename T>
178 static oop oop_load_not_in_heap(T* addr);
179
180 template <typename T>
181 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value);
182
183 template <typename T>
184 static oop oop_atomic_xchg_not_in_heap(oop new_value, T* addr);
185
186 };
187
188 };
189
190 template<>
191 struct BarrierSet::GetName<ShenandoahBarrierSet> {
192 static const BarrierSet::Name value = BarrierSet::ShenandoahBarrierSet;
193 };
194
195 template<>
196 struct BarrierSet::GetType<BarrierSet::ShenandoahBarrierSet> {
197 typedef ::ShenandoahBarrierSet type;
198 };
199
|
160 template <typename T>
161 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value);
162 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value);
163
164 template <typename T>
165 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr);
166 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset);
167
168 template <typename T>
169 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
170 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
171 size_t length);
172
173 // Clone barrier support
174 static void clone_in_heap(oop src, oop dst, size_t size);
175
176 // Needed for loads on non-heap weak references
177 template <typename T>
178 static oop oop_load_not_in_heap(T* addr);
179
180 #ifdef ASSERT
181 // Used for catching bad stores
182 template <typename T>
183 static void oop_store_not_in_heap(T* addr, oop value);
184 #endif
185 template <typename T>
186 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value);
187
188 template <typename T>
189 static oop oop_atomic_xchg_not_in_heap(oop new_value, T* addr);
190
191 };
192
193 };
194
195 template<>
196 struct BarrierSet::GetName<ShenandoahBarrierSet> {
197 static const BarrierSet::Name value = BarrierSet::ShenandoahBarrierSet;
198 };
199
200 template<>
201 struct BarrierSet::GetType<BarrierSet::ShenandoahBarrierSet> {
202 typedef ::ShenandoahBarrierSet type;
203 };
204
|