153 return Raw::oop_atomic_cmpxchg_in_heap_at(new_value, base, offset, compare_value); |
153 return Raw::oop_atomic_cmpxchg_in_heap_at(new_value, base, offset, compare_value); |
154 } |
154 } |
155 |
155 |
156 template <DecoratorSet decorators, typename BarrierSetT> |
156 template <DecoratorSet decorators, typename BarrierSetT> |
157 template <typename T> |
157 template <typename T> |
158 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_in_heap(oop new_value, T* addr) { |
158 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_in_heap(T* addr, oop new_value) { |
159 verify_decorators_present<ON_STRONG_OOP_REF>(); |
159 verify_decorators_present<ON_STRONG_OOP_REF>(); |
160 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
160 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
161 |
161 |
162 const oop o = Raw::oop_atomic_xchg_in_heap(new_value, addr); |
162 const oop o = Raw::oop_atomic_xchg_in_heap(addr, new_value); |
163 return ZBarrier::load_barrier_on_oop(o); |
163 return ZBarrier::load_barrier_on_oop(o); |
164 } |
164 } |
165 |
165 |
166 template <DecoratorSet decorators, typename BarrierSetT> |
166 template <DecoratorSet decorators, typename BarrierSetT> |
167 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_in_heap_at(oop new_value, oop base, ptrdiff_t offset) { |
167 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) { |
168 verify_decorators_present<ON_STRONG_OOP_REF>(); |
168 verify_decorators_present<ON_STRONG_OOP_REF>(); |
169 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
169 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
170 |
170 |
171 const oop o = Raw::oop_atomic_xchg_in_heap_at(new_value, base, offset); |
171 const oop o = Raw::oop_atomic_xchg_in_heap_at(base, offset, new_value); |
172 return ZBarrier::load_barrier_on_oop(o); |
172 return ZBarrier::load_barrier_on_oop(o); |
173 } |
173 } |
174 |
174 |
175 template <DecoratorSet decorators, typename BarrierSetT> |
175 template <DecoratorSet decorators, typename BarrierSetT> |
176 template <typename T> |
176 template <typename T> |
229 return Raw::oop_atomic_cmpxchg_not_in_heap(new_value, addr, compare_value); |
229 return Raw::oop_atomic_cmpxchg_not_in_heap(new_value, addr, compare_value); |
230 } |
230 } |
231 |
231 |
232 template <DecoratorSet decorators, typename BarrierSetT> |
232 template <DecoratorSet decorators, typename BarrierSetT> |
233 template <typename T> |
233 template <typename T> |
234 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_not_in_heap(oop new_value, T* addr) { |
234 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_atomic_xchg_not_in_heap(T* addr, oop new_value) { |
235 verify_decorators_present<ON_STRONG_OOP_REF>(); |
235 verify_decorators_present<ON_STRONG_OOP_REF>(); |
236 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
236 verify_decorators_absent<AS_NO_KEEPALIVE>(); |
237 |
237 |
238 return Raw::oop_atomic_xchg_not_in_heap(new_value, addr); |
238 return Raw::oop_atomic_xchg_not_in_heap(addr, new_value); |
239 } |
239 } |
240 |
240 |
241 #endif // SHARE_GC_Z_ZBARRIERSET_INLINE_HPP |
241 #endif // SHARE_GC_Z_ZBARRIERSET_INLINE_HPP |