253
254 template <typename T>
255 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
256 return Raw::oop_atomic_xchg(new_value, addr);
257 }
258
259 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
260 return Raw::oop_atomic_xchg_at(new_value, base, offset);
261 }
262
263 template <typename T>
264 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
265 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
266 size_t length) {
267 return Raw::oop_arraycopy(src_obj, src_offset_in_bytes, src_raw,
268 dst_obj, dst_offset_in_bytes, dst_raw,
269 length);
270 }
271
272 // Off-heap oop accesses. These accessors get resolved when
273 // IN_HEAP is not set (e.g. when using the RootAccess API), it is
274 // an oop* overload, and the barrier strength is AS_NORMAL.
275 template <typename T>
276 static oop oop_load_not_in_heap(T* addr) {
277 return Raw::template oop_load<oop>(addr);
278 }
279
280 template <typename T>
281 static void oop_store_not_in_heap(T* addr, oop value) {
282 Raw::oop_store(addr, value);
283 }
284
285 template <typename T>
286 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
287 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
288 }
289
290 template <typename T>
291 static oop oop_atomic_xchg_not_in_heap(oop new_value, T* addr) {
292 return Raw::oop_atomic_xchg(new_value, addr);
293 }
|
253
254 template <typename T>
255 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
256 return Raw::oop_atomic_xchg(new_value, addr);
257 }
258
259 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
260 return Raw::oop_atomic_xchg_at(new_value, base, offset);
261 }
262
263 template <typename T>
264 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
265 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
266 size_t length) {
267 return Raw::oop_arraycopy(src_obj, src_offset_in_bytes, src_raw,
268 dst_obj, dst_offset_in_bytes, dst_raw,
269 length);
270 }
271
272 // Off-heap oop accesses. These accessors get resolved when
273 // IN_HEAP is not set (e.g. when using the NativeAccess API), it is
274 // an oop* overload, and the barrier strength is AS_NORMAL.
275 template <typename T>
276 static oop oop_load_not_in_heap(T* addr) {
277 return Raw::template oop_load<oop>(addr);
278 }
279
280 template <typename T>
281 static void oop_store_not_in_heap(T* addr, oop value) {
282 Raw::oop_store(addr, value);
283 }
284
285 template <typename T>
286 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
287 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
288 }
289
290 template <typename T>
291 static oop oop_atomic_xchg_not_in_heap(oop new_value, T* addr) {
292 return Raw::oop_atomic_xchg(new_value, addr);
293 }
|