56 return (markWord*) &_mark; 57 } 58 59 void oopDesc::set_mark(markWord m) { 60 HeapAccess<MO_VOLATILE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); 61 } 62 63 void oopDesc::set_mark_raw(markWord m) { 64 Atomic::store(&_mark, m); 65 } 66 67 void oopDesc::set_mark_raw(HeapWord* mem, markWord m) { 68 *(markWord*)(((char*)mem) + mark_offset_in_bytes()) = m; 69 } 70 71 void oopDesc::release_set_mark(markWord m) { 72 HeapAccess<MO_RELEASE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); 73 } 74 75 markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark) { 76 uintptr_t v = HeapAccess<>::atomic_cmpxchg_at(new_mark.value(), as_oop(), mark_offset_in_bytes(), old_mark.value()); 77 return markWord(v); 78 } 79 80 markWord oopDesc::cas_set_mark_raw(markWord new_mark, markWord old_mark, atomic_memory_order order) { 81 return Atomic::cmpxchg(new_mark, &_mark, old_mark, order); 82 } 83 84 void oopDesc::init_mark() { 85 set_mark(markWord::prototype_for_klass(klass())); 86 } 87 88 void oopDesc::init_mark_raw() { 89 set_mark_raw(markWord::prototype_for_klass(klass())); 90 } 91 92 Klass* oopDesc::klass() const { 93 if (UseCompressedClassPointers) { 94 return CompressedKlassPointers::decode_not_null(_metadata._compressed_klass); 95 } else { 96 return _metadata._klass; 97 } 98 } 99 100 Klass* oopDesc::klass_or_null() const volatile { 101 if (UseCompressedClassPointers) { | 56 return (markWord*) &_mark; 57 } 58 59 void oopDesc::set_mark(markWord m) { 60 HeapAccess<MO_VOLATILE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); 61 } 62 63 void oopDesc::set_mark_raw(markWord m) { 64 Atomic::store(&_mark, m); 65 } 66 67 void oopDesc::set_mark_raw(HeapWord* mem, markWord m) { 68 *(markWord*)(((char*)mem) + mark_offset_in_bytes()) = m; 69 } 70 71 void oopDesc::release_set_mark(markWord m) { 72 HeapAccess<MO_RELEASE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); 73 } 74 75 markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark) { 76 uintptr_t v = HeapAccess<>::atomic_cmpxchg_at(as_oop(), mark_offset_in_bytes(), old_mark.value(), new_mark.value()); 77 return markWord(v); 78 } 79 80 markWord oopDesc::cas_set_mark_raw(markWord new_mark, markWord old_mark, atomic_memory_order order) { 81 return Atomic::cmpxchg(&_mark, old_mark, new_mark, order); 82 } 83 84 void oopDesc::init_mark() { 85 set_mark(markWord::prototype_for_klass(klass())); 86 } 87 88 void oopDesc::init_mark_raw() { 89 set_mark_raw(markWord::prototype_for_klass(klass())); 90 } 91 92 Klass* oopDesc::klass() const { 93 if (UseCompressedClassPointers) { 94 return CompressedKlassPointers::decode_not_null(_metadata._compressed_klass); 95 } else { 96 return _metadata._klass; 97 } 98 } 99 100 Klass* oopDesc::klass_or_null() const volatile { 101 if (UseCompressedClassPointers) { |