< prev index next >

src/hotspot/share/oops/access.inline.hpp

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

*** 137,147 **** template <class GCBarrierType, DecoratorSet decorators> struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic { template <typename T> static bool access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) { ! return GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length); } template <typename T> static bool oop_access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) { typedef typename HeapOopType<decorators>::type OopType; --- 137,148 ---- template <class GCBarrierType, DecoratorSet decorators> struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic { template <typename T> static bool access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) { ! GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length); ! return true; } template <typename T> static bool oop_access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) { typedef typename HeapOopType<decorators>::type OopType;
*** 761,771 **** template <DecoratorSet decorators, typename T> inline static typename EnableIf< HasDecorator<decorators, AS_RAW>::value, bool>::type arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) { typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw; ! return Raw::arraycopy(src, dst, length); } template <DecoratorSet decorators, typename T> inline static typename EnableIf< !HasDecorator<decorators, AS_RAW>::value, bool>::type --- 762,772 ---- template <DecoratorSet decorators, typename T> inline static typename EnableIf< HasDecorator<decorators, AS_RAW>::value, bool>::type arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) { typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw; ! return Raw::arraycopy(src_obj, dst_obj, src, dst, length); } template <DecoratorSet decorators, typename T> inline static typename EnableIf< !HasDecorator<decorators, AS_RAW>::value, bool>::type
*** 1075,1085 **** return PreRuntimeDispatch::atomic_xchg_at<expanded_decorators>(new_decayed_value, base, offset); } template <DecoratorSet decorators, typename T> inline bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T *dst, size_t length) { ! verify_types<decorators, T>(); typedef typename Decay<T>::type DecayedT; const DecoratorSet expanded_decorators = DecoratorFixup<decorators | IN_HEAP_ARRAY | IN_HEAP | (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ? INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY)>::value; return PreRuntimeDispatch::arraycopy<expanded_decorators>(src_obj, dst_obj, --- 1076,1088 ---- return PreRuntimeDispatch::atomic_xchg_at<expanded_decorators>(new_decayed_value, base, offset); } template <DecoratorSet decorators, typename T> inline bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T *src, T *dst, size_t length) { ! STATIC_ASSERT((HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value || ! (IsSame<T, void>::value || IsIntegral<T>::value) || ! IsFloatingPoint<T>::value)); // arraycopy allows type erased void elements typedef typename Decay<T>::type DecayedT; const DecoratorSet expanded_decorators = DecoratorFixup<decorators | IN_HEAP_ARRAY | IN_HEAP | (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ? INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY)>::value; return PreRuntimeDispatch::arraycopy<expanded_decorators>(src_obj, dst_obj,
< prev index next >