< prev index next >

src/hotspot/share/oops/oop.inline.hpp

Print this page

        

*** 108,120 **** Klass* oopDesc::klass_or_null_acquire() const volatile { if (UseCompressedClassPointers) { // Workaround for non-const load_acquire parameter. const volatile narrowKlass* addr = &_metadata._compressed_klass; volatile narrowKlass* xaddr = const_cast<volatile narrowKlass*>(addr); ! return CompressedKlassPointers::decode(OrderAccess::load_acquire(xaddr)); } else { ! return OrderAccess::load_acquire(&_metadata._klass); } } Klass** oopDesc::klass_addr(HeapWord* mem) { // Only used internally and with CMS and will not work with --- 108,120 ---- Klass* oopDesc::klass_or_null_acquire() const volatile { if (UseCompressedClassPointers) { // Workaround for non-const load_acquire parameter. const volatile narrowKlass* addr = &_metadata._compressed_klass; volatile narrowKlass* xaddr = const_cast<volatile narrowKlass*>(addr); ! return CompressedKlassPointers::decode(Atomic::load_acquire(xaddr)); } else { ! return Atomic::load_acquire(&_metadata._klass); } } Klass** oopDesc::klass_addr(HeapWord* mem) { // Only used internally and with CMS and will not work with
*** 154,167 **** } void oopDesc::release_set_klass(HeapWord* mem, Klass* klass) { CHECK_SET_KLASS(klass); if (UseCompressedClassPointers) { ! OrderAccess::release_store(compressed_klass_addr(mem), CompressedKlassPointers::encode_not_null(klass)); } else { ! OrderAccess::release_store(klass_addr(mem), klass); } } #undef CHECK_SET_KLASS --- 154,167 ---- } void oopDesc::release_set_klass(HeapWord* mem, Klass* klass) { CHECK_SET_KLASS(klass); if (UseCompressedClassPointers) { ! Atomic::release_store(compressed_klass_addr(mem), CompressedKlassPointers::encode_not_null(klass)); } else { ! Atomic::release_store(klass_addr(mem), klass); } } #undef CHECK_SET_KLASS
*** 354,364 **** // Note that the forwardee is not the same thing as the displaced_mark. // The forwardee is used when copying during scavenge and mark-sweep. // It does need to clear the low two locking- and GC-related bits. oop oopDesc::forwardee_acquire() const { ! return (oop) OrderAccess::load_acquire(&_mark).decode_pointer(); } // The following method needs to be MT safe. uint oopDesc::age() const { assert(!is_forwarded(), "Attempt to read age from forwarded mark"); --- 354,364 ---- // Note that the forwardee is not the same thing as the displaced_mark. // The forwardee is used when copying during scavenge and mark-sweep. // It does need to clear the low two locking- and GC-related bits. oop oopDesc::forwardee_acquire() const { ! return (oop) Atomic::load_acquire(&_mark).decode_pointer(); } // The following method needs to be MT safe. uint oopDesc::age() const { assert(!is_forwarded(), "Attempt to read age from forwarded mark");
< prev index next >