< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp

Print this page
rev 57746 : 8240873: Shenandoah: Short-cut arraycopy barriers
Reviewed-by: shade


 106 
 107   template <class T>
 108   oop load_reference_barrier_mutator_work(oop obj, T* load_addr);
 109 
 110   oop load_reference_barrier_native(oop obj, oop* load_addr);
 111   oop load_reference_barrier_native(oop obj, narrowOop* load_addr);
 112 
 113 private:
 114   template <class T>
 115   inline void arraycopy_pre_work(T* src, T* dst, size_t count);
 116   template <class T, bool HAS_FWD, bool EVAC, bool ENQUEUE>
 117   inline void arraycopy_work(T* src, size_t count);
 118   template <class T>
 119   inline void arraycopy_update_impl(T* src, size_t count);
 120 
 121   oop load_reference_barrier_impl(oop obj);
 122 
 123   template <class T>
 124   oop load_reference_barrier_native_impl(oop obj, T* load_addr);
 125 

 126 public:
 127   // Callbacks for runtime accesses.
 128   template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet>
 129   class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
 130     typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
 131 
 132   public:
 133     // Heap oop accesses. These accessors get resolved when
 134     // IN_HEAP is set (e.g. when using the HeapAccess API), it is
 135     // an oop_* overload, and the barrier strength is AS_NORMAL.
 136     template <typename T>
 137     static oop oop_load_in_heap(T* addr);
 138     static oop oop_load_in_heap_at(oop base, ptrdiff_t offset);
 139 
 140     template <typename T>
 141     static void oop_store_in_heap(T* addr, oop value);
 142     static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value);
 143 
 144     template <typename T>
 145     static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);




 106 
 107   template <class T>
 108   oop load_reference_barrier_mutator_work(oop obj, T* load_addr);
 109 
 110   oop load_reference_barrier_native(oop obj, oop* load_addr);
 111   oop load_reference_barrier_native(oop obj, narrowOop* load_addr);
 112 
 113 private:
 114   template <class T>
 115   inline void arraycopy_pre_work(T* src, T* dst, size_t count);
 116   template <class T, bool HAS_FWD, bool EVAC, bool ENQUEUE>
 117   inline void arraycopy_work(T* src, size_t count);
 118   template <class T>
 119   inline void arraycopy_update_impl(T* src, size_t count);
 120 
 121   oop load_reference_barrier_impl(oop obj);
 122 
 123   template <class T>
 124   oop load_reference_barrier_native_impl(oop obj, T* load_addr);
 125 
 126   inline bool skip_bulk_update(HeapWord* dst);
 127 public:
 128   // Callbacks for runtime accesses.
 129   template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet>
 130   class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
 131     typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
 132 
 133   public:
 134     // Heap oop accesses. These accessors get resolved when
 135     // IN_HEAP is set (e.g. when using the HeapAccess API), it is
 136     // an oop_* overload, and the barrier strength is AS_NORMAL.
 137     template <typename T>
 138     static oop oop_load_in_heap(T* addr);
 139     static oop oop_load_in_heap_at(oop base, ptrdiff_t offset);
 140 
 141     template <typename T>
 142     static void oop_store_in_heap(T* addr, oop value);
 143     static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value);
 144 
 145     template <typename T>
 146     static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);


< prev index next >