src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp
changeset 59252 623722a6aeb9
parent 59249 29b0d0b61615
child 59296 9186be5c78ba
equal deleted inserted replaced
59251:4cbfa5077d68 59252:623722a6aeb9
   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());