8166583: Add oopDesc::klass_or_null_acquire()

Added new function.

Reviewed-by: dholmes, tschatzl
This commit is contained in:
Kim Barrett 2016-09-23 18:23:12 -04:00
parent 630f133f17
commit c0c4200524
2 changed files with 12 additions and 1 deletions

View file

@ -83,6 +83,7 @@ class oopDesc {
inline Klass* klass() const;
inline Klass* klass_or_null() const volatile;
inline Klass* klass_or_null_acquire() const volatile;
inline Klass** klass_addr();
inline narrowKlass* compressed_klass_addr();

View file

@ -109,7 +109,6 @@ Klass* oopDesc::klass() const {
}
Klass* oopDesc::klass_or_null() const volatile {
// can be NULL in CMS
if (UseCompressedClassPointers) {
return Klass::decode_klass(_metadata._compressed_klass);
} else {
@ -117,6 +116,17 @@ Klass* oopDesc::klass_or_null() const volatile {
}
}
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 Klass::decode_klass(OrderAccess::load_acquire(xaddr));
} else {
return (Klass*)OrderAccess::load_ptr_acquire(&_metadata._klass);
}
}
Klass** oopDesc::klass_addr() {
// Only used internally and with CMS and will not work with
// UseCompressedOops