156 // Heap oop accesses. These accessors get resolved when
157 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
158 // an oop_* overload, and the barrier strength is AS_NORMAL.
159 template <typename T>
160 static oop oop_load_in_heap(T* addr);
161 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset);
162
163 template <typename T>
164 static void oop_store_in_heap(T* addr, oop value);
165 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value);
166
167 template <typename T>
168 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
169 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value);
170
171 template <typename T>
172 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
173 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value);
174
175 template <typename T>
176 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
177 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
178 size_t length);
179
180 // Clone barrier support
181 static void clone_in_heap(oop src, oop dst, size_t size);
182
183 // Support for concurrent roots evacuation, updating and weak roots clearing
184 template <typename T>
185 static oop oop_load_not_in_heap(T* addr);
186
187 // Support for concurrent roots marking
188 template <typename T>
189 static void oop_store_not_in_heap(T* addr, oop value);
190
191 template <typename T>
192 static oop oop_atomic_cmpxchg_not_in_heap(T* addr, oop compare_value, oop new_value);
193
194 template <typename T>
195 static oop oop_atomic_xchg_not_in_heap(T* addr, oop new_value);
196 };
|
156 // Heap oop accesses. These accessors get resolved when
157 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
158 // an oop_* overload, and the barrier strength is AS_NORMAL.
159 template <typename T>
160 static oop oop_load_in_heap(T* addr);
161 static oop oop_load_in_heap_at(oop base, ptrdiff_t offset);
162
163 template <typename T>
164 static void oop_store_in_heap(T* addr, oop value);
165 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value);
166
167 template <typename T>
168 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
169 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value);
170
171 template <typename T>
172 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
173 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value);
174
175 template <typename T>
176 static void oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
177 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
178 size_t length);
179
180 // Clone barrier support
181 static void clone_in_heap(oop src, oop dst, size_t size);
182
183 // Support for concurrent roots evacuation, updating and weak roots clearing
184 template <typename T>
185 static oop oop_load_not_in_heap(T* addr);
186
187 // Support for concurrent roots marking
188 template <typename T>
189 static void oop_store_not_in_heap(T* addr, oop value);
190
191 template <typename T>
192 static oop oop_atomic_cmpxchg_not_in_heap(T* addr, oop compare_value, oop new_value);
193
194 template <typename T>
195 static oop oop_atomic_xchg_not_in_heap(T* addr, oop new_value);
196 };
|