279
280 static bool equals(oop o1, oop o2) {
281 verify_decorators<INTERNAL_EMPTY>();
282 return AccessInternal::equals<decorators>(o1, o2);
283 }
284 };
285
286 // Helper for performing raw accesses (knows only of memory ordering
287 // atomicity decorators as well as compressed oops)
288 template <DecoratorSet decorators = INTERNAL_EMPTY>
289 class RawAccess: public Access<AS_RAW | decorators> {};
290
291 // Helper for performing normal accesses on the heap. These accesses
292 // may resolve an accessor on a GC barrier set
293 template <DecoratorSet decorators = INTERNAL_EMPTY>
294 class HeapAccess: public Access<IN_HEAP | decorators> {};
295
296 // Helper for performing normal accesses in roots. These accesses
297 // may resolve an accessor on a GC barrier set
298 template <DecoratorSet decorators = INTERNAL_EMPTY>
299 class RootAccess: public Access<IN_ROOT | decorators> {};
300
301 // Helper for array access.
302 template <DecoratorSet decorators = INTERNAL_EMPTY>
303 class ArrayAccess: public HeapAccess<IN_HEAP_ARRAY | decorators> {
304 typedef HeapAccess<IN_HEAP_ARRAY | decorators> AccessT;
305 public:
306 template <typename T>
307 static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
308 arrayOop dst_obj, size_t dst_offset_in_bytes,
309 size_t length) {
310 AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
311 dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
312 length);
313 }
314
315 template <typename T>
316 static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes,
317 T* dst,
318 size_t length) {
319 AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
|
279
280 static bool equals(oop o1, oop o2) {
281 verify_decorators<INTERNAL_EMPTY>();
282 return AccessInternal::equals<decorators>(o1, o2);
283 }
284 };
285
286 // Helper for performing raw accesses (knows only of memory ordering
287 // atomicity decorators as well as compressed oops)
288 template <DecoratorSet decorators = INTERNAL_EMPTY>
289 class RawAccess: public Access<AS_RAW | decorators> {};
290
291 // Helper for performing normal accesses on the heap. These accesses
292 // may resolve an accessor on a GC barrier set
293 template <DecoratorSet decorators = INTERNAL_EMPTY>
294 class HeapAccess: public Access<IN_HEAP | decorators> {};
295
296 // Helper for performing normal accesses in roots. These accesses
297 // may resolve an accessor on a GC barrier set
298 template <DecoratorSet decorators = INTERNAL_EMPTY>
299 class NativeAccess: public Access<IN_ROOT | decorators> {};
300
301 // Helper for array access.
302 template <DecoratorSet decorators = INTERNAL_EMPTY>
303 class ArrayAccess: public HeapAccess<IN_HEAP_ARRAY | decorators> {
304 typedef HeapAccess<IN_HEAP_ARRAY | decorators> AccessT;
305 public:
306 template <typename T>
307 static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes,
308 arrayOop dst_obj, size_t dst_offset_in_bytes,
309 size_t length) {
310 AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
311 dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
312 length);
313 }
314
315 template <typename T>
316 static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes,
317 T* dst,
318 size_t length) {
319 AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast<const T*>(NULL),
|