385
386 template <typename T>
387 static inline void store_at(oop base, ptrdiff_t offset, T value) {
388 verify_primitive_decorators<store_mo_decorators>();
389 AccessInternal::store_at<decorators>(base, offset, value);
390 }
391
392 template <typename T>
393 static inline T atomic_cmpxchg_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
394 verify_primitive_decorators<atomic_cmpxchg_mo_decorators>();
395 return AccessInternal::atomic_cmpxchg_at<decorators>(new_value, base, offset, compare_value);
396 }
397
398 template <typename T>
399 static inline T atomic_xchg_at(T new_value, oop base, ptrdiff_t offset) {
400 verify_primitive_decorators<atomic_xchg_mo_decorators>();
401 return AccessInternal::atomic_xchg_at<decorators>(new_value, base, offset);
402 }
403
404 template <typename T>
405 static inline bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T *dst, size_t length) {
406 verify_decorators<ARRAYCOPY_DECORATOR_MASK | IN_HEAP |
407 AS_DECORATOR_MASK>();
408 return AccessInternal::arraycopy<decorators>(src_obj, dst_obj, src, dst, length);
409 }
410
411 // Oop heap accesses
412 static inline AccessInternal::LoadAtProxy<decorators | INTERNAL_VALUE_IS_OOP> oop_load_at(oop base, ptrdiff_t offset) {
413 verify_heap_oop_decorators<load_mo_decorators>();
414 return AccessInternal::LoadAtProxy<decorators | INTERNAL_VALUE_IS_OOP>(base, offset);
415 }
416
417 template <typename T>
418 static inline void oop_store_at(oop base, ptrdiff_t offset, T value) {
419 verify_heap_oop_decorators<store_mo_decorators>();
420 typedef typename AccessInternal::OopOrNarrowOop<T>::type OopType;
421 OopType oop_value = value;
422 AccessInternal::store_at<decorators | INTERNAL_VALUE_IS_OOP>(base, offset, oop_value);
423 }
424
425 template <typename T>
426 static inline T oop_atomic_cmpxchg_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
427 verify_heap_oop_decorators<atomic_cmpxchg_mo_decorators>();
428 typedef typename AccessInternal::OopOrNarrowOop<T>::type OopType;
|
385
386 template <typename T>
387 static inline void store_at(oop base, ptrdiff_t offset, T value) {
388 verify_primitive_decorators<store_mo_decorators>();
389 AccessInternal::store_at<decorators>(base, offset, value);
390 }
391
392 template <typename T>
393 static inline T atomic_cmpxchg_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
394 verify_primitive_decorators<atomic_cmpxchg_mo_decorators>();
395 return AccessInternal::atomic_cmpxchg_at<decorators>(new_value, base, offset, compare_value);
396 }
397
398 template <typename T>
399 static inline T atomic_xchg_at(T new_value, oop base, ptrdiff_t offset) {
400 verify_primitive_decorators<atomic_xchg_mo_decorators>();
401 return AccessInternal::atomic_xchg_at<decorators>(new_value, base, offset);
402 }
403
404 template <typename T>
405 static inline void arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T *dst, size_t length) {
406 verify_decorators<ARRAYCOPY_DECORATOR_MASK | IN_HEAP |
407 AS_DECORATOR_MASK>();
408 AccessInternal::arraycopy<decorators>(src_obj, dst_obj, src, dst, length);
409 }
410
411 // Oop heap accesses
412 static inline AccessInternal::LoadAtProxy<decorators | INTERNAL_VALUE_IS_OOP> oop_load_at(oop base, ptrdiff_t offset) {
413 verify_heap_oop_decorators<load_mo_decorators>();
414 return AccessInternal::LoadAtProxy<decorators | INTERNAL_VALUE_IS_OOP>(base, offset);
415 }
416
417 template <typename T>
418 static inline void oop_store_at(oop base, ptrdiff_t offset, T value) {
419 verify_heap_oop_decorators<store_mo_decorators>();
420 typedef typename AccessInternal::OopOrNarrowOop<T>::type OopType;
421 OopType oop_value = value;
422 AccessInternal::store_at<decorators | INTERNAL_VALUE_IS_OOP>(base, offset, oop_value);
423 }
424
425 template <typename T>
426 static inline T oop_atomic_cmpxchg_at(T new_value, oop base, ptrdiff_t offset, T compare_value) {
427 verify_heap_oop_decorators<atomic_cmpxchg_mo_decorators>();
428 typedef typename AccessInternal::OopOrNarrowOop<T>::type OopType;
|