src/hotspot/share/gc/z/zBarrierSet.inline.hpp
changeset 59251 4cbfa5077d68
parent 55555 9a5e9537fe1a
child 59252 623722a6aeb9
equal deleted inserted replaced
59250:a6deb69743d4 59251:4cbfa5077d68
   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