140 template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet> |
140 template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet> |
141 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> { |
141 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> { |
142 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw; |
142 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw; |
143 |
143 |
144 template <typename T> |
144 template <typename T> |
145 static oop oop_atomic_cmpxchg_in_heap_impl(oop new_value, T* addr, oop compare_value); |
145 static oop oop_atomic_cmpxchg_in_heap_impl(T* addr, oop compare_value, oop new_value); |
146 |
146 |
147 template <typename T> |
147 template <typename T> |
148 static oop oop_atomic_xchg_in_heap_impl(T* addr, oop new_value); |
148 static oop oop_atomic_xchg_in_heap_impl(T* addr, oop new_value); |
149 |
149 |
150 public: |
150 public: |
158 template <typename T> |
158 template <typename T> |
159 static void oop_store_in_heap(T* addr, oop value); |
159 static void oop_store_in_heap(T* addr, oop value); |
160 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value); |
160 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value); |
161 |
161 |
162 template <typename T> |
162 template <typename T> |
163 static oop oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value); |
163 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value); |
164 static oop oop_atomic_cmpxchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset, oop compare_value); |
164 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value); |
165 |
165 |
166 template <typename T> |
166 template <typename T> |
167 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value); |
167 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value); |
168 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value); |
168 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value); |
169 |
169 |
182 // Used for catching bad stores |
182 // Used for catching bad stores |
183 template <typename T> |
183 template <typename T> |
184 static void oop_store_not_in_heap(T* addr, oop value); |
184 static void oop_store_not_in_heap(T* addr, oop value); |
185 |
185 |
186 template <typename T> |
186 template <typename T> |
187 static oop oop_atomic_cmpxchg_not_in_heap(oop new_value, T* addr, oop compare_value); |
187 static oop oop_atomic_cmpxchg_not_in_heap(T* addr, oop compare_value, oop new_value); |
188 |
188 |
189 template <typename T> |
189 template <typename T> |
190 static oop oop_atomic_xchg_not_in_heap(T* addr, oop new_value); |
190 static oop oop_atomic_xchg_not_in_heap(T* addr, oop new_value); |
191 |
191 |
192 }; |
192 }; |