< prev index next >

src/hotspot/share/oops/access.hpp

Print this page
rev 49217 : 8198445: Access API for primitive/native arraycopy
Reviewed-by: pliden, eosterlund, dholmes


 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;


< prev index next >