< prev index next >

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

Print this page
rev 50331 : 8198285: More consistent Access API for arraycopy

*** 121,141 **** }; 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; ! return GCBarrierType::oop_arraycopy_in_heap(src_obj, dst_obj, ! reinterpret_cast<OopType*>(src), ! reinterpret_cast<OopType*>(dst), length); } }; template <class GCBarrierType, DecoratorSet decorators> struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic { --- 121,140 ---- }; template <class GCBarrierType, DecoratorSet decorators> struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic { template <typename T> ! static bool access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw, arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length) { ! GCBarrierType::arraycopy_in_heap(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length); return true; } template <typename T> ! static bool oop_access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw, arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length) { typedef typename HeapOopType<decorators>::type OopType; ! return GCBarrierType::oop_arraycopy_in_heap(src_obj, src_offset_in_bytes, reinterpret_cast<const OopType*>(src_raw), ! dst_obj, dst_offset_in_bytes, reinterpret_cast<OopType*>(dst_raw), length); } }; template <class GCBarrierType, DecoratorSet decorators> struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic {
*** 335,348 **** _atomic_xchg_at_func = function; return function(new_value, base, offset); } template <DecoratorSet decorators, typename T> ! bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) { func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier(); _arraycopy_func = function; ! return function(src_obj, dst_obj, src, dst, length); } template <DecoratorSet decorators, typename T> void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) { func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier(); --- 334,347 ---- _atomic_xchg_at_func = function; return function(new_value, base, offset); } template <DecoratorSet decorators, typename T> ! bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw, arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, size_t length) { func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier(); _arraycopy_func = function; ! return function(src_obj, src_offset_in_bytes, src_raw, dst_obj, dst_offset_in_bytes, dst_raw, length); } template <DecoratorSet decorators, typename T> void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) { func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier();
< prev index next >