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();
|