51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
# HG changeset patch
|
|
# User kbarrett
|
|
# Date 1474669392 14400
|
|
# Fri Sep 23 18:23:12 2016 -0400
|
|
# Node ID 3296281c85d3d7aa95a2aa95aa4801bf1a343426
|
|
# Parent 7f7c1e1fbc8a70f9730339872ddf56fee812304c
|
|
8166583: Add oopDesc::klass_or_null_acquire()
|
|
Summary: Added new function.
|
|
Reviewed-by: dholmes, tschatzl
|
|
|
|
diff --git a/src/share/vm/oops/oop.hpp b/src/share/vm/oops/oop.hpp
|
|
--- a/hotspot/src/share/vm/oops/oop.hpp
|
|
+++ b/hotspot/src/share/vm/oops/oop.hpp
|
|
@@ -83,6 +83,7 @@
|
|
|
|
Klass* klass() const;
|
|
Klass* klass_or_null() const volatile;
|
|
+ Klass* klass_or_null_acquire() const volatile;
|
|
Klass** klass_addr();
|
|
narrowKlass* compressed_klass_addr();
|
|
|
|
diff --git a/src/share/vm/oops/oop.inline.hpp b/src/share/vm/oops/oop.inline.hpp
|
|
--- a/hotspot/src/share/vm/oops/oop.inline.hpp
|
|
+++ b/hotspot/src/share/vm/oops/oop.inline.hpp
|
|
@@ -78,7 +78,6 @@
|
|
}
|
|
|
|
inline Klass* oopDesc::klass_or_null() const volatile {
|
|
- // can be NULL in CMS
|
|
if (UseCompressedClassPointers) {
|
|
return Klass::decode_klass(_metadata._compressed_klass);
|
|
} else {
|
|
@@ -86,6 +85,17 @@
|
|
}
|
|
}
|
|
|
|
+inline 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);
|
|
+ }
|
|
+}
|
|
+
|
|
inline int oopDesc::klass_gap_offset_in_bytes() {
|
|
assert(UseCompressedClassPointers, "only applicable to compressed klass pointers");
|
|
return oopDesc::klass_offset_in_bytes() + sizeof(narrowKlass);
|