166 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
167 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
168 }
169
170 template <typename T>
171 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
172 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
173 }
174
175 template <typename T>
176 static T atomic_xchg_in_heap(T new_value, T* addr) {
177 return Raw::atomic_xchg(new_value, addr);
178 }
179
180 template <typename T>
181 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
182 return Raw::atomic_xchg_at(new_value, base, offset);
183 }
184
185 template <typename T>
186 static void arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
187 Raw::arraycopy(src_obj, dst_obj, src, dst, length);
188 }
189
190 // Heap oop accesses. These accessors get resolved when
191 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
192 // an oop_* overload, and the barrier strength is AS_NORMAL.
193 template <typename T>
194 static oop oop_load_in_heap(T* addr) {
195 return Raw::template oop_load<oop>(addr);
196 }
197
198 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
199 return Raw::template oop_load_at<oop>(base, offset);
200 }
201
202 template <typename T>
203 static void oop_store_in_heap(T* addr, oop value) {
204 Raw::oop_store(addr, value);
205 }
206
207 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
210
211 template <typename T>
212 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value) {
213 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
214 }
215
216 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value) {
217 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
218 }
219
220 template <typename T>
221 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
222 return Raw::oop_atomic_xchg(new_value, addr);
223 }
224
225 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
226 return Raw::oop_atomic_xchg_at(new_value, base, offset);
227 }
228
229 template <typename T>
230 static bool oop_arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
231 return Raw::oop_arraycopy(src_obj, dst_obj, src, dst, length);
232 }
233
234 // Off-heap oop accesses. These accessors get resolved when
235 // IN_HEAP is not set (e.g. when using the RootAccess API), it is
236 // an oop* overload, and the barrier strength is AS_NORMAL.
237 template <typename T>
238 static oop oop_load_not_in_heap(T* addr) {
239 return Raw::template oop_load<oop>(addr);
240 }
241
242 template <typename T>
243 static void oop_store_not_in_heap(T* addr, oop value) {
244 Raw::oop_store(addr, value);
245 }
246
247 template <typename T>
248 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
249 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
250 }
251
|
166 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
167 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
168 }
169
170 template <typename T>
171 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
172 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
173 }
174
175 template <typename T>
176 static T atomic_xchg_in_heap(T new_value, T* addr) {
177 return Raw::atomic_xchg(new_value, addr);
178 }
179
180 template <typename T>
181 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
182 return Raw::atomic_xchg_at(new_value, base, offset);
183 }
184
185 template <typename T>
186 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) {
187 Raw::arraycopy(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length);
188 }
189
190 // Heap oop accesses. These accessors get resolved when
191 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
192 // an oop_* overload, and the barrier strength is AS_NORMAL.
193 template <typename T>
194 static oop oop_load_in_heap(T* addr) {
195 return Raw::template oop_load<oop>(addr);
196 }
197
198 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
199 return Raw::template oop_load_at<oop>(base, offset);
200 }
201
202 template <typename T>
203 static void oop_store_in_heap(T* addr, oop value) {
204 Raw::oop_store(addr, value);
205 }
206
207 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
210
211 template <typename T>
212 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value) {
213 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
214 }
215
216 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value) {
217 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
218 }
219
220 template <typename T>
221 static oop oop_atomic_xchg_in_heap(oop new_value, T* addr) {
222 return Raw::oop_atomic_xchg(new_value, addr);
223 }
224
225 static oop oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) {
226 return Raw::oop_atomic_xchg_at(new_value, base, offset);
227 }
228
229 template <typename T>
230 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) {
231 return Raw::oop_arraycopy(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length);
232 }
233
234 // Off-heap oop accesses. These accessors get resolved when
235 // IN_HEAP is not set (e.g. when using the RootAccess API), it is
236 // an oop* overload, and the barrier strength is AS_NORMAL.
237 template <typename T>
238 static oop oop_load_not_in_heap(T* addr) {
239 return Raw::template oop_load<oop>(addr);
240 }
241
242 template <typename T>
243 static void oop_store_not_in_heap(T* addr, oop value) {
244 Raw::oop_store(addr, value);
245 }
246
247 template <typename T>
248 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value) {
249 return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
250 }
251
|