129 } |
129 } |
130 } |
130 } |
131 |
131 |
132 inline oop ShenandoahHeap::cas_oop(oop n, oop* addr, oop c) { |
132 inline oop ShenandoahHeap::cas_oop(oop n, oop* addr, oop c) { |
133 assert(is_aligned(addr, HeapWordSize), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
133 assert(is_aligned(addr, HeapWordSize), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
134 return (oop) Atomic::cmpxchg(n, addr, c); |
134 return (oop) Atomic::cmpxchg(addr, c, n); |
135 } |
135 } |
136 |
136 |
137 inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, narrowOop c) { |
137 inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, narrowOop c) { |
138 assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
138 assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
139 narrowOop val = CompressedOops::encode(n); |
139 narrowOop val = CompressedOops::encode(n); |
140 return CompressedOops::decode((narrowOop) Atomic::cmpxchg(val, addr, c)); |
140 return CompressedOops::decode((narrowOop) Atomic::cmpxchg(addr, c, val)); |
141 } |
141 } |
142 |
142 |
143 inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, oop c) { |
143 inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, oop c) { |
144 assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
144 assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr)); |
145 narrowOop cmp = CompressedOops::encode(c); |
145 narrowOop cmp = CompressedOops::encode(c); |
146 narrowOop val = CompressedOops::encode(n); |
146 narrowOop val = CompressedOops::encode(n); |
147 return CompressedOops::decode((narrowOop) Atomic::cmpxchg(val, addr, cmp)); |
147 return CompressedOops::decode((narrowOop) Atomic::cmpxchg(addr, cmp, val)); |
148 } |
148 } |
149 |
149 |
150 template <class T> |
150 template <class T> |
151 inline oop ShenandoahHeap::maybe_update_with_forwarded_not_null(T* p, oop heap_oop) { |
151 inline oop ShenandoahHeap::maybe_update_with_forwarded_not_null(T* p, oop heap_oop) { |
152 shenandoah_assert_not_in_cset_loc_except(p, !is_in(p) || is_full_gc_in_progress() || is_degenerated_gc_in_progress()); |
152 shenandoah_assert_not_in_cset_loc_except(p, !is_in(p) || is_full_gc_in_progress() || is_degenerated_gc_in_progress()); |