< prev index next >

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

Print this page
rev 48545 : Value-based classes (vbc) / Oop value test via metadata ptr


  78     const volatile narrowKlass* addr = &_metadata._compressed_klass;
  79     volatile narrowKlass* xaddr = const_cast<volatile narrowKlass*>(addr);
  80     return Klass::decode_klass(OrderAccess::load_acquire(xaddr));
  81   } else {
  82     return OrderAccess::load_acquire(&_metadata._klass);
  83   }
  84 }
  85 
  86 Klass** oopDesc::klass_addr() {
  87   // Only used internally and with CMS and will not work with
  88   // UseCompressedOops
  89   assert(!UseCompressedClassPointers, "only supported with uncompressed klass pointers");
  90   return (Klass**) &_metadata._klass;
  91 }
  92 
  93 narrowKlass* oopDesc::compressed_klass_addr() {
  94   assert(UseCompressedClassPointers, "only called by compressed klass pointers");
  95   return &_metadata._compressed_klass;
  96 }
  97 










  98 #define CHECK_SET_KLASS(k)                                                \
  99   do {                                                                    \
 100     assert(Universe::is_bootstrapping() || k != NULL, "NULL Klass");      \
 101     assert(Universe::is_bootstrapping() || k->is_klass(), "not a Klass"); \
 102   } while (0)
 103 
 104 void oopDesc::set_klass(Klass* k) {
 105   CHECK_SET_KLASS(k);
 106   if (UseCompressedClassPointers) {
 107     *compressed_klass_addr() = Klass::encode_klass_not_null(k);
 108   } else {
 109     *klass_addr() = k;
 110   }
 111 }
 112 
 113 void oopDesc::release_set_klass(Klass* k) {
 114   CHECK_SET_KLASS(k);
 115   if (UseCompressedClassPointers) {
 116     OrderAccess::release_store(compressed_klass_addr(),
 117                                Klass::encode_klass_not_null(k));




  78     const volatile narrowKlass* addr = &_metadata._compressed_klass;
  79     volatile narrowKlass* xaddr = const_cast<volatile narrowKlass*>(addr);
  80     return Klass::decode_klass(OrderAccess::load_acquire(xaddr));
  81   } else {
  82     return OrderAccess::load_acquire(&_metadata._klass);
  83   }
  84 }
  85 
  86 Klass** oopDesc::klass_addr() {
  87   // Only used internally and with CMS and will not work with
  88   // UseCompressedOops
  89   assert(!UseCompressedClassPointers, "only supported with uncompressed klass pointers");
  90   return (Klass**) &_metadata._klass;
  91 }
  92 
  93 narrowKlass* oopDesc::compressed_klass_addr() {
  94   assert(UseCompressedClassPointers, "only called by compressed klass pointers");
  95   return &_metadata._compressed_klass;
  96 }
  97 
  98 #if INCLUDE_VBC // fast oop only test (does not load klass)
  99 bool oopDesc::klass_is_value_based() {
 100         if (UseCompressedClassPointers) {
 101                 return Klass::decode_ptr_is_value_based(_metadata._compressed_klass);
 102         } else {
 103                 return Klass::ptr_is_value_based(_metadata._klass);
 104         }
 105 }
 106 #endif
 107 
 108 #define CHECK_SET_KLASS(k)                                                \
 109   do {                                                                    \
 110     assert(Universe::is_bootstrapping() || k != NULL, "NULL Klass");      \
 111     assert(Universe::is_bootstrapping() || k->is_klass(), "not a Klass"); \
 112   } while (0)
 113 
 114 void oopDesc::set_klass(Klass* k) {
 115   CHECK_SET_KLASS(k);
 116   if (UseCompressedClassPointers) {
 117     *compressed_klass_addr() = Klass::encode_klass_not_null(k);
 118   } else {
 119     *klass_addr() = k;
 120   }
 121 }
 122 
 123 void oopDesc::release_set_klass(Klass* k) {
 124   CHECK_SET_KLASS(k);
 125   if (UseCompressedClassPointers) {
 126     OrderAccess::release_store(compressed_klass_addr(),
 127                                Klass::encode_klass_not_null(k));


< prev index next >