< prev index next >

src/hotspot/share/oops/valueKlass.hpp

Print this page




  32 // A ValueKlass is a specialized InstanceKlass for value types.
  33 
  34 
  35 class ValueKlass: public InstanceKlass {
  36   friend class VMStructs;
  37   friend class InstanceKlass;
  38 
  39  private:
  40 
  41   // Constructor
  42   ValueKlass(const ClassFileParser& parser)
  43     : InstanceKlass(parser, InstanceKlass::_misc_kind_value_type, InstanceKlass::ID) {
  44     _adr_valueklass_fixed_block = valueklass_static_bloc();
  45     // Addresses used for value type calling convention
  46     *((Array<SigEntry>**)adr_extended_sig()) = NULL;
  47     *((Array<VMRegPair>**)adr_return_regs()) = NULL;
  48     *((address*)adr_pack_handler()) = NULL;
  49     *((address*)adr_unpack_handler()) = NULL;
  50     assert(pack_handler() == NULL, "pack handler not null");
  51     *((int*)adr_default_value_offset()) = 0;
  52     assert(Klass::ptr_is_value_type(this), "Value type klass ptr encoding");
  53     set_prototype_header(markOopDesc::always_locked_prototype());
  54   }
  55 
  56   ValueKlassFixedBlock* valueklass_static_bloc() const {
  57     address adr_jf = adr_value_fields_klasses();
  58     if (adr_jf != NULL) {
  59       return (ValueKlassFixedBlock*)(adr_jf + this->java_fields_count() * sizeof(Klass*));
  60     }
  61 
  62     address adr_fing = adr_fingerprint();
  63     if (adr_fing != NULL) {
  64       return (ValueKlassFixedBlock*)(adr_fingerprint() + sizeof(u8));
  65     }
  66 
  67     InstanceKlass** adr_host = adr_host_klass();
  68     if (adr_host != NULL) {
  69       return (ValueKlassFixedBlock*)(adr_host + 1);
  70     }
  71 
  72     Klass** adr_impl = adr_implementor();




  32 // A ValueKlass is a specialized InstanceKlass for value types.
  33 
  34 
  35 class ValueKlass: public InstanceKlass {
  36   friend class VMStructs;
  37   friend class InstanceKlass;
  38 
  39  private:
  40 
  41   // Constructor
  42   ValueKlass(const ClassFileParser& parser)
  43     : InstanceKlass(parser, InstanceKlass::_misc_kind_value_type, InstanceKlass::ID) {
  44     _adr_valueklass_fixed_block = valueklass_static_bloc();
  45     // Addresses used for value type calling convention
  46     *((Array<SigEntry>**)adr_extended_sig()) = NULL;
  47     *((Array<VMRegPair>**)adr_return_regs()) = NULL;
  48     *((address*)adr_pack_handler()) = NULL;
  49     *((address*)adr_unpack_handler()) = NULL;
  50     assert(pack_handler() == NULL, "pack handler not null");
  51     *((int*)adr_default_value_offset()) = 0;

  52     set_prototype_header(markOopDesc::always_locked_prototype());
  53   }
  54 
  55   ValueKlassFixedBlock* valueklass_static_bloc() const {
  56     address adr_jf = adr_value_fields_klasses();
  57     if (adr_jf != NULL) {
  58       return (ValueKlassFixedBlock*)(adr_jf + this->java_fields_count() * sizeof(Klass*));
  59     }
  60 
  61     address adr_fing = adr_fingerprint();
  62     if (adr_fing != NULL) {
  63       return (ValueKlassFixedBlock*)(adr_fingerprint() + sizeof(u8));
  64     }
  65 
  66     InstanceKlass** adr_host = adr_host_klass();
  67     if (adr_host != NULL) {
  68       return (ValueKlassFixedBlock*)(adr_host + 1);
  69     }
  70 
  71     Klass** adr_impl = adr_implementor();


< prev index next >