equal
deleted
inserted
replaced
65 } |
65 } |
66 |
66 |
67 template <DecoratorSet decorators, typename BarrierSetT> |
67 template <DecoratorSet decorators, typename BarrierSetT> |
68 template <typename T> |
68 template <typename T> |
69 inline oop ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT>:: |
69 inline oop ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT>:: |
70 oop_atomic_cmpxchg_in_heap(oop new_value, T* addr, oop compare_value) { |
70 oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value) { |
71 BarrierSetT *bs = barrier_set_cast<BarrierSetT>(barrier_set()); |
71 BarrierSetT *bs = barrier_set_cast<BarrierSetT>(barrier_set()); |
72 bs->template write_ref_field_pre<decorators>(addr); |
72 bs->template write_ref_field_pre<decorators>(addr); |
73 oop result = Raw::oop_atomic_cmpxchg(new_value, addr, compare_value); |
73 oop result = Raw::oop_atomic_cmpxchg(addr, compare_value, new_value); |
74 if (result == compare_value) { |
74 if (result == compare_value) { |
75 bs->template write_ref_field_post<decorators>(addr, new_value); |
75 bs->template write_ref_field_post<decorators>(addr, new_value); |
76 } |
76 } |
77 return result; |
77 return result; |
78 } |
78 } |