src/hotspot/share/oops/access.inline.hpp
changeset 50389 7e8c0409a747
parent 49658 8237a91c1cca
child 53207 b1c6d4d7f801
equal deleted inserted replaced
50388:55fac6146d31 50389:7e8c0409a747
   121   };
   121   };
   122 
   122 
   123   template <class GCBarrierType, DecoratorSet decorators>
   123   template <class GCBarrierType, DecoratorSet decorators>
   124   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
   124   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
   125     template <typename T>
   125     template <typename T>
   126     static bool access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
   126     static bool access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
   127       GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length);
   127                                arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
       
   128                                size_t length) {
       
   129       GCBarrierType::arraycopy_in_heap(src_obj, src_offset_in_bytes, src_raw,
       
   130                                        dst_obj, dst_offset_in_bytes, dst_raw,
       
   131                                        length);
   128       return true;
   132       return true;
   129     }
   133     }
   130 
   134 
   131     template <typename T>
   135     template <typename T>
   132     static bool oop_access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
   136     static bool oop_access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
   133       typedef typename HeapOopType<decorators>::type OopType;
   137                                    arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
   134       return GCBarrierType::oop_arraycopy_in_heap(src_obj, dst_obj,
   138                                    size_t length) {
   135                                                   reinterpret_cast<OopType*>(src),
   139       typedef typename HeapOopType<decorators>::type OopType;
   136                                                   reinterpret_cast<OopType*>(dst), length);
   140       return GCBarrierType::oop_arraycopy_in_heap(src_obj, src_offset_in_bytes, reinterpret_cast<OopType*>(src_raw),
       
   141                                                   dst_obj, dst_offset_in_bytes, reinterpret_cast<OopType*>(dst_raw),
       
   142                                                   length);
   137     }
   143     }
   138   };
   144   };
   139 
   145 
   140   template <class GCBarrierType, DecoratorSet decorators>
   146   template <class GCBarrierType, DecoratorSet decorators>
   141   struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic {
   147   struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic {
   335     _atomic_xchg_at_func = function;
   341     _atomic_xchg_at_func = function;
   336     return function(new_value, base, offset);
   342     return function(new_value, base, offset);
   337   }
   343   }
   338 
   344 
   339   template <DecoratorSet decorators, typename T>
   345   template <DecoratorSet decorators, typename T>
   340   bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) {
   346   bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
       
   347                                                                          arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
       
   348                                                                          size_t length) {
   341     func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier();
   349     func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier();
   342     _arraycopy_func = function;
   350     _arraycopy_func = function;
   343     return function(src_obj, dst_obj, src, dst, length);
   351     return function(src_obj, src_offset_in_bytes, src_raw,
       
   352                     dst_obj, dst_offset_in_bytes, dst_raw,
       
   353                     length);
   344   }
   354   }
   345 
   355 
   346   template <DecoratorSet decorators, typename T>
   356   template <DecoratorSet decorators, typename T>
   347   void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) {
   357   void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) {
   348     func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier();
   358     func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier();