90 template <DecoratorSet decorators>
91 inline void keep_alive_if_weak(oop value);
92 inline void keep_alive_if_weak(DecoratorSet decorators, oop value);
93
94 inline void enqueue(oop obj);
95
96 oop load_reference_barrier(oop obj);
97 oop load_reference_barrier_not_null(oop obj);
98
99 oop load_reference_barrier_mutator(oop obj, oop* load_addr);
100 oop load_reference_barrier_mutator(oop obj, narrowOop* load_addr);
101
102 template <class T>
103 oop load_reference_barrier_mutator_work(oop obj, T* load_addr);
104
105 oop load_reference_barrier_native(oop obj, oop* load_addr);
106 oop load_reference_barrier_native(oop obj, narrowOop* load_addr);
107
108 private:
109 template <class T>
110 inline void arraycopy_marking(T* ary, size_t count);
111 template <class T>
112 inline void arraycopy_evacuation(T* src, size_t count);
113 template <class T>
114 inline void arraycopy_update(T* src, size_t count);
115
116 template <class T, bool HAS_FWD, bool EVAC, bool ENQUEUE>
117 inline void arraycopy_work(T* src, size_t count);
118
119 oop load_reference_barrier_impl(oop obj);
120
121 template <class T>
122 oop load_reference_barrier_native_impl(oop obj, T* load_addr);
123
124 inline bool need_bulk_update(HeapWord* dst);
125 public:
126 // Callbacks for runtime accesses.
127 template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet>
128 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
129 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
130
131 public:
132 // Heap oop accesses. These accessors get resolved when
133 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
134 // an oop_* overload, and the barrier strength is AS_NORMAL.
|
90 template <DecoratorSet decorators>
91 inline void keep_alive_if_weak(oop value);
92 inline void keep_alive_if_weak(DecoratorSet decorators, oop value);
93
94 inline void enqueue(oop obj);
95
96 oop load_reference_barrier(oop obj);
97 oop load_reference_barrier_not_null(oop obj);
98
99 oop load_reference_barrier_mutator(oop obj, oop* load_addr);
100 oop load_reference_barrier_mutator(oop obj, narrowOop* load_addr);
101
102 template <class T>
103 oop load_reference_barrier_mutator_work(oop obj, T* load_addr);
104
105 oop load_reference_barrier_native(oop obj, oop* load_addr);
106 oop load_reference_barrier_native(oop obj, narrowOop* load_addr);
107
108 private:
109 template <class T>
110 inline void arraycopy_marking(T* src, T* dst, size_t count);
111 template <class T>
112 inline void arraycopy_evacuation(T* src, size_t count);
113 template <class T>
114 inline void arraycopy_update(T* src, size_t count);
115
116 inline void clone_marking(oop src);
117 inline void clone_evacuation(oop src);
118 inline void clone_update(oop src);
119
120 template <class T, bool HAS_FWD, bool EVAC, bool ENQUEUE>
121 inline void arraycopy_work(T* src, size_t count);
122
123 oop load_reference_barrier_impl(oop obj);
124
125 template <class T>
126 oop load_reference_barrier_native_impl(oop obj, T* load_addr);
127
128 inline bool need_bulk_update(HeapWord* dst);
129 public:
130 // Callbacks for runtime accesses.
131 template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet>
132 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
133 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
134
135 public:
136 // Heap oop accesses. These accessors get resolved when
137 // IN_HEAP is set (e.g. when using the HeapAccess API), it is
138 // an oop_* overload, and the barrier strength is AS_NORMAL.
|