changeset 10862:b4a58a1cd60f

8166583: Add oopDesc::klass_or_null_acquire() Summary: Added new function. Reviewed-by: dholmes, tschatzl, adinn
author kbarrett
date Fri, 23 Sep 2016 18:23:12 -0400
parents 9cf4c59c7395
children be47c996965c
files src/share/vm/oops/oop.hpp src/share/vm/oops/oop.inline.hpp
diffstat 2 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/oops/oop.hpp	Fri Dec 01 17:03:07 2017 +0100
+++ b/src/share/vm/oops/oop.hpp	Fri Sep 23 18:23:12 2016 -0400
@@ -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();
 
--- a/src/share/vm/oops/oop.inline.hpp	Fri Dec 01 17:03:07 2017 +0100
+++ b/src/share/vm/oops/oop.inline.hpp	Fri Sep 23 18:23:12 2016 -0400
@@ -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);