< 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 >