102 address adr_default_value_offset() const { 103 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 104 return ((address)_adr_valueklass_fixed_block) + in_bytes(default_value_offset_offset()); 105 } 106 107 address adr_value_array_klass() const { 108 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 109 return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _value_array_klass)); 110 } 111 112 Klass* get_value_array_klass() const { 113 return *(Klass**)adr_value_array_klass(); 114 } 115 116 Klass* acquire_value_array_klass() const { 117 return OrderAccess::load_acquire((Klass**)adr_value_array_klass()); 118 } 119 120 Klass* allocate_value_array_klass(TRAPS); 121 122 int collect_fields(GrowableArray<SigEntry>* sig, int base_off = 0) const; 123 124 void cleanup_blobs(); 125 126 protected: 127 // Returns the array class for the n'th dimension 128 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS); 129 130 // Returns the array class with this class as element type 131 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS); 132 133 // Specifically flat array klass 134 Klass* value_array_klass(ArrayStorageProperties storage_props, bool or_null, int rank, TRAPS); 135 136 public: 137 // Type testing 138 bool is_value_slow() const { return true; } 139 140 // value_mirror is the primary mirror 141 oop value_mirror() const { return java_lang_Class::inline_type_mirror(java_mirror()); } | 102 address adr_default_value_offset() const { 103 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 104 return ((address)_adr_valueklass_fixed_block) + in_bytes(default_value_offset_offset()); 105 } 106 107 address adr_value_array_klass() const { 108 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 109 return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _value_array_klass)); 110 } 111 112 Klass* get_value_array_klass() const { 113 return *(Klass**)adr_value_array_klass(); 114 } 115 116 Klass* acquire_value_array_klass() const { 117 return OrderAccess::load_acquire((Klass**)adr_value_array_klass()); 118 } 119 120 Klass* allocate_value_array_klass(TRAPS); 121 122 address adr_alignment() const { 123 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 124 return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _alignment)); 125 } 126 127 address adr_first_field_offset() const { 128 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 129 return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _first_field_offset)); 130 } 131 132 address adr_exact_size_in_bytes() const { 133 assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); 134 return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _exact_size_in_bytes)); 135 } 136 137 public: 138 int get_alignment() const { 139 return *(int*)adr_alignment(); 140 } 141 142 void set_alignment(int alignment) { 143 *(int*)adr_alignment() = alignment; 144 } 145 146 int get_first_field_offset() const { 147 int offset = *(int*)adr_first_field_offset(); 148 assert(offset != 0, "Must be initialized before use"); 149 return *(int*)adr_first_field_offset(); 150 } 151 152 void set_first_field_offset(int offset) { 153 *(int*)adr_first_field_offset() = offset; 154 } 155 156 int get_exact_size_in_bytes() { 157 return *(int*)adr_exact_size_in_bytes(); 158 } 159 160 void set_exact_size_in_bytes(int exact_size) { 161 *(int*)adr_exact_size_in_bytes() = exact_size; 162 } 163 164 private: 165 int collect_fields(GrowableArray<SigEntry>* sig, int base_off = 0) const; 166 167 void cleanup_blobs(); 168 169 protected: 170 // Returns the array class for the n'th dimension 171 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS); 172 173 // Returns the array class with this class as element type 174 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS); 175 176 // Specifically flat array klass 177 Klass* value_array_klass(ArrayStorageProperties storage_props, bool or_null, int rank, TRAPS); 178 179 public: 180 // Type testing 181 bool is_value_slow() const { return true; } 182 183 // value_mirror is the primary mirror 184 oop value_mirror() const { return java_lang_Class::inline_type_mirror(java_mirror()); } |