196 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
197 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
198 }
199
200 template <typename T>
201 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
202 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
203 }
204
205 template <typename T>
206 static T atomic_xchg_in_heap(T new_value, T* addr) {
207 return Raw::atomic_xchg(new_value, addr);
208 }
209
210 template <typename T>
211 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
212 return Raw::atomic_xchg_at(new_value, base, offset);
213 }
214
215 template <typename T>
216 static void arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
217 Raw::arraycopy(src_obj, dst_obj, src, dst, length);
218 }
219
220 // Heap oop accesses. These accessors get resolved when
221 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
222 // an oop_* overload, and the barrier strength is AS_NORMAL.
223 template <typename T>
224 static oop oop_load_in_heap(T* addr) {
225 return Raw::template oop_load<oop>(addr);
226 }
227
228 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
229 return Raw::template oop_load_at<oop>(base, offset);
230 }
231
232 template <typename T>
233 static void oop_store_in_heap(T* addr, oop value) {
234 Raw::oop_store(addr, value);
235 }
236
237 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
240
241 template <typename T>
242 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value) {
243 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
244 }
245
246 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value) {
247 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
248 }
249
250 template <typename T>
251 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
252 return Raw::oop_atomic_xchg(new_value, addr);
253 }
254
255 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
256 return Raw::oop_atomic_xchg_at(new_value, base, offset);
257 }
258
259 template <typename T>
260 static bool oop_arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
261 return Raw::oop_arraycopy(src_obj, dst_obj, src, dst, length);
262 }
263
264 // Off-heap oop accesses. These accessors get resolved when
265 // IN_HEAP is not set (e.g. when using the RootAccess API), it is
266 // an oop* overload, and the barrier strength is AS_NORMAL.
267 template <typename T>
268 static oop oop_load_not_in_heap(T* addr) {
269 return Raw::template oop_load<oop>(addr);
270 }
271
272 template <typename T>
273 static void oop_store_not_in_heap(T* addr, oop value) {
274 Raw::oop_store(addr, value);
275 }
276
277 template <typename T>
278 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
279 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
280 }
281
|
196 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
197 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
198 }
199
200 template <typename T>
201 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
202 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
203 }
204
205 template <typename T>
206 static T atomic_xchg_in_heap(T new_value, T* addr) {
207 return Raw::atomic_xchg(new_value, addr);
208 }
209
210 template <typename T>
211 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
212 return Raw::atomic_xchg_at(new_value, base, offset);
213 }
214
215 template <typename T>
216 static void arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw, arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length) {
217 Raw::arraycopy(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length);
218 }
219
220 // Heap oop accesses. These accessors get resolved when
221 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
222 // an oop_* overload, and the barrier strength is AS_NORMAL.
223 template <typename T>
224 static oop oop_load_in_heap(T* addr) {
225 return Raw::template oop_load<oop>(addr);
226 }
227
228 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
229 return Raw::template oop_load_at<oop>(base, offset);
230 }
231
232 template <typename T>
233 static void oop_store_in_heap(T* addr, oop value) {
234 Raw::oop_store(addr, value);
235 }
236
237 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
240
241 template <typename T>
242 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value) {
243 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
244 }
245
246 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value) {
247 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
248 }
249
250 template <typename T>
251 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
252 return Raw::oop_atomic_xchg(new_value, addr);
253 }
254
255 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
256 return Raw::oop_atomic_xchg_at(new_value, base, offset);
257 }
258
259 template <typename T>
260 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw, arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length) {
261 return Raw::oop_arraycopy(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length);
262 }
263
264 // Off-heap oop accesses. These accessors get resolved when
265 // IN_HEAP is not set (e.g. when using the RootAccess API), it is
266 // an oop* overload, and the barrier strength is AS_NORMAL.
267 template <typename T>
268 static oop oop_load_not_in_heap(T* addr) {
269 return Raw::template oop_load<oop>(addr);
270 }
271
272 template <typename T>
273 static void oop_store_not_in_heap(T* addr, oop value) {
274 Raw::oop_store(addr, value);
275 }
276
277 template <typename T>
278 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
279 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
280 }
281
|