< prev index next >

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

Print this page




 107   template <class GCBarrierType, DecoratorSet decorators>
 108   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ATOMIC_CMPXCHG, decorators>: public AllStatic {
 109     template <typename T>
 110     static T access_barrier(T new_value, void* addr, T compare_value) {
 111       return GCBarrierType::atomic_cmpxchg_in_heap(new_value, reinterpret_cast<T*>(addr), compare_value);
 112     }
 113 
 114     static oop oop_access_barrier(oop new_value, void* addr, oop compare_value) {
 115       typedef typename HeapOopType<decorators>::type OopType;
 116       if (HasDecorator<decorators, IN_HEAP>::value) {
 117         return GCBarrierType::oop_atomic_cmpxchg_in_heap(new_value, reinterpret_cast<OopType*>(addr), compare_value);
 118       } else {
 119         return GCBarrierType::oop_atomic_cmpxchg_not_in_heap(new_value, reinterpret_cast<OopType*>(addr), compare_value);
 120       }
 121     }
 122   };
 123 
 124   template <class GCBarrierType, DecoratorSet decorators>
 125   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
 126     template <typename T>
 127     static bool access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
 128                                arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
 129                                size_t length) {
 130       GCBarrierType::arraycopy_in_heap(src_obj, src_offset_in_bytes, src_raw,
 131                                        dst_obj, dst_offset_in_bytes, dst_raw,
 132                                        length);
 133       return true;
 134     }
 135 
 136     template <typename T>
 137     static bool oop_access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
 138                                    arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
 139                                    size_t length) {
 140       typedef typename HeapOopType<decorators>::type OopType;
 141       return GCBarrierType::oop_arraycopy_in_heap(src_obj, src_offset_in_bytes, reinterpret_cast<OopType*>(src_raw),
 142                                                   dst_obj, dst_offset_in_bytes, reinterpret_cast<OopType*>(dst_raw),
 143                                                   length);
 144     }
 145   };
 146 
 147   template <class GCBarrierType, DecoratorSet decorators>
 148   struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic {
 149     template <typename T>
 150     static void access_barrier(oop base, ptrdiff_t offset, T value) {
 151       GCBarrierType::store_in_heap_at(base, offset, value);
 152     }
 153 
 154     static void oop_access_barrier(oop base, ptrdiff_t offset, oop value) {
 155       GCBarrierType::oop_store_in_heap_at(base, offset, value);
 156     }
 157   };
 158 
 159   template <class GCBarrierType, DecoratorSet decorators>
 160   struct PostRuntimeDispatch<GCBarrierType, BARRIER_LOAD_AT, decorators>: public AllStatic {
 161     template <typename T>


 327     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_CMPXCHG_AT>::resolve_barrier();
 328     _atomic_cmpxchg_at_func = function;
 329     return function(new_value, base, offset, compare_value);
 330   }
 331 
 332   template <DecoratorSet decorators, typename T>
 333   T RuntimeDispatch<decorators, T, BARRIER_ATOMIC_XCHG>::atomic_xchg_init(T new_value, void* addr) {
 334     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_XCHG>::resolve_barrier();
 335     _atomic_xchg_func = function;
 336     return function(new_value, addr);
 337   }
 338 
 339   template <DecoratorSet decorators, typename T>
 340   T RuntimeDispatch<decorators, T, BARRIER_ATOMIC_XCHG_AT>::atomic_xchg_at_init(T new_value, oop base, ptrdiff_t offset) {
 341     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_XCHG_AT>::resolve_barrier();
 342     _atomic_xchg_at_func = function;
 343     return function(new_value, base, offset);
 344   }
 345 
 346   template <DecoratorSet decorators, typename T>
 347   bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
 348                                                                          arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
 349                                                                          size_t length) {
 350     func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier();
 351     _arraycopy_func = function;
 352     return function(src_obj, src_offset_in_bytes, src_raw,
 353                     dst_obj, dst_offset_in_bytes, dst_raw,
 354                     length);
 355   }
 356 
 357   template <DecoratorSet decorators, typename T>
 358   void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) {
 359     func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier();
 360     _clone_func = function;
 361     function(src, dst, size);
 362   }
 363 
 364   template <DecoratorSet decorators, typename T>
 365   oop RuntimeDispatch<decorators, T, BARRIER_RESOLVE>::resolve_init(oop obj) {
 366     func_t function = BarrierResolver<decorators, func_t, BARRIER_RESOLVE>::resolve_barrier();
 367     _resolve_func = function;
 368     return function(obj);
 369   }
 370 
 371   template <DecoratorSet decorators, typename T>
 372   bool RuntimeDispatch<decorators, T, BARRIER_EQUALS>::equals_init(oop o1, oop o2) {


 107   template <class GCBarrierType, DecoratorSet decorators>
 108   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ATOMIC_CMPXCHG, decorators>: public AllStatic {
 109     template <typename T>
 110     static T access_barrier(T new_value, void* addr, T compare_value) {
 111       return GCBarrierType::atomic_cmpxchg_in_heap(new_value, reinterpret_cast<T*>(addr), compare_value);
 112     }
 113 
 114     static oop oop_access_barrier(oop new_value, void* addr, oop compare_value) {
 115       typedef typename HeapOopType<decorators>::type OopType;
 116       if (HasDecorator<decorators, IN_HEAP>::value) {
 117         return GCBarrierType::oop_atomic_cmpxchg_in_heap(new_value, reinterpret_cast<OopType*>(addr), compare_value);
 118       } else {
 119         return GCBarrierType::oop_atomic_cmpxchg_not_in_heap(new_value, reinterpret_cast<OopType*>(addr), compare_value);
 120       }
 121     }
 122   };
 123 
 124   template <class GCBarrierType, DecoratorSet decorators>
 125   struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
 126     template <typename T>
 127     static void access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
 128                                arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
 129                                size_t length) {
 130       GCBarrierType::arraycopy_in_heap(src_obj, src_offset_in_bytes, src_raw,
 131                                        dst_obj, dst_offset_in_bytes, dst_raw,
 132                                        length);

 133     }
 134 
 135     template <typename T>
 136     static void oop_access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
 137                                    arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
 138                                    size_t length) {
 139       typedef typename HeapOopType<decorators>::type OopType;
 140       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);
 143     }
 144   };
 145 
 146   template <class GCBarrierType, DecoratorSet decorators>
 147   struct PostRuntimeDispatch<GCBarrierType, BARRIER_STORE_AT, decorators>: public AllStatic {
 148     template <typename T>
 149     static void access_barrier(oop base, ptrdiff_t offset, T value) {
 150       GCBarrierType::store_in_heap_at(base, offset, value);
 151     }
 152 
 153     static void oop_access_barrier(oop base, ptrdiff_t offset, oop value) {
 154       GCBarrierType::oop_store_in_heap_at(base, offset, value);
 155     }
 156   };
 157 
 158   template <class GCBarrierType, DecoratorSet decorators>
 159   struct PostRuntimeDispatch<GCBarrierType, BARRIER_LOAD_AT, decorators>: public AllStatic {
 160     template <typename T>


 326     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_CMPXCHG_AT>::resolve_barrier();
 327     _atomic_cmpxchg_at_func = function;
 328     return function(new_value, base, offset, compare_value);
 329   }
 330 
 331   template <DecoratorSet decorators, typename T>
 332   T RuntimeDispatch<decorators, T, BARRIER_ATOMIC_XCHG>::atomic_xchg_init(T new_value, void* addr) {
 333     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_XCHG>::resolve_barrier();
 334     _atomic_xchg_func = function;
 335     return function(new_value, addr);
 336   }
 337 
 338   template <DecoratorSet decorators, typename T>
 339   T RuntimeDispatch<decorators, T, BARRIER_ATOMIC_XCHG_AT>::atomic_xchg_at_init(T new_value, oop base, ptrdiff_t offset) {
 340     func_t function = BarrierResolver<decorators, func_t, BARRIER_ATOMIC_XCHG_AT>::resolve_barrier();
 341     _atomic_xchg_at_func = function;
 342     return function(new_value, base, offset);
 343   }
 344 
 345   template <DecoratorSet decorators, typename T>
 346   void 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) {
 349     func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier();
 350     _arraycopy_func = function;
 351     function(src_obj, src_offset_in_bytes, src_raw,
 352              dst_obj, dst_offset_in_bytes, dst_raw,
 353              length);
 354   }
 355 
 356   template <DecoratorSet decorators, typename T>
 357   void RuntimeDispatch<decorators, T, BARRIER_CLONE>::clone_init(oop src, oop dst, size_t size) {
 358     func_t function = BarrierResolver<decorators, func_t, BARRIER_CLONE>::resolve_barrier();
 359     _clone_func = function;
 360     function(src, dst, size);
 361   }
 362 
 363   template <DecoratorSet decorators, typename T>
 364   oop RuntimeDispatch<decorators, T, BARRIER_RESOLVE>::resolve_init(oop obj) {
 365     func_t function = BarrierResolver<decorators, func_t, BARRIER_RESOLVE>::resolve_barrier();
 366     _resolve_func = function;
 367     return function(obj);
 368   }
 369 
 370   template <DecoratorSet decorators, typename T>
 371   bool RuntimeDispatch<decorators, T, BARRIER_EQUALS>::equals_init(oop o1, oop o2) {
< prev index next >