172 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
173 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
174 }
175
176 template <typename T>
177 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
178 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
179 }
180
181 template <typename T>
182 static T atomic_xchg_in_heap(T new_value, T* addr) {
183 return Raw::atomic_xchg(new_value, addr);
184 }
185
186 template <typename T>
187 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
188 return Raw::atomic_xchg_at(new_value, base, offset);
189 }
190
191 template <typename T>
192 static bool arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
193 return Raw::arraycopy(src_obj, dst_obj, src, dst, length);
194 }
195
196 // Heap oop accesses. These accessors get resolved when
197 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
198 // an oop_* overload, and the barrier strength is AS_NORMAL.
199 template <typename T>
200 static oop oop_load_in_heap(T* addr) {
201 return Raw::template oop_load<oop>(addr);
202 }
203
204 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
205 return Raw::template oop_load_at<oop>(base, offset);
206 }
207
208 template <typename T>
209 static void oop_store_in_heap(T* addr, oop value) {
210 Raw::oop_store(addr, value);
211 }
212
213 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
|
172 static T atomic_cmpxchg_in_heap(T new_value, T* addr, T compare_value) {
173 return Raw::atomic_cmpxchg(new_value, addr, compare_value);
174 }
175
176 template <typename T>
177 static T atomic_cmpxchg_in_heap_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
178 return Raw::oop_atomic_cmpxchg_at(new_value, base, offset, compare_value);
179 }
180
181 template <typename T>
182 static T atomic_xchg_in_heap(T new_value, T* addr) {
183 return Raw::atomic_xchg(new_value, addr);
184 }
185
186 template <typename T>
187 static T atomic_xchg_in_heap_at(T new_value, oop base, ptrdiff_t offset) {
188 return Raw::atomic_xchg_at(new_value, base, offset);
189 }
190
191 template <typename T>
192 static void arraycopy_in_heap(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
193 Raw::arraycopy(src_obj, dst_obj, src, dst, length);
194 }
195
196 // Heap oop accesses. These accessors get resolved when
197 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
198 // an oop_* overload, and the barrier strength is AS_NORMAL.
199 template <typename T>
200 static oop oop_load_in_heap(T* addr) {
201 return Raw::template oop_load<oop>(addr);
202 }
203
204 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset) {
205 return Raw::template oop_load_at<oop>(base, offset);
206 }
207
208 template <typename T>
209 static void oop_store_in_heap(T* addr, oop value) {
210 Raw::oop_store(addr, value);
211 }
212
213 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
|