< prev index next >

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

Print this page




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










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




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


< prev index next >