< prev index next >

src/hotspot/share/oops/valueKlass.hpp

Print this page

        

*** 117,130 **** --- 117,175 ---- return OrderAccess::load_acquire((Klass**)adr_value_array_klass()); } Klass* allocate_value_array_klass(TRAPS); + address adr_alignment() const { + assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); + return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _alignment)); + } + + address adr_first_field_offset() const { + assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); + return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _first_field_offset)); + } + + address adr_exact_size_in_bytes() const { + assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); + return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _exact_size_in_bytes)); + } + + public: + int get_alignment() const { + return *(int*)adr_alignment(); + } + + void set_alignment(int alignment) { + *(int*)adr_alignment() = alignment; + } + + int get_first_field_offset() const { + int offset = *(int*)adr_first_field_offset(); + assert(offset != 0, "Must be initialized before use"); + return *(int*)adr_first_field_offset(); + } + + void set_first_field_offset(int offset) { + *(int*)adr_first_field_offset() = offset; + } + + int get_exact_size_in_bytes() { + return *(int*)adr_exact_size_in_bytes(); + } + + void set_exact_size_in_bytes(int exact_size) { + *(int*)adr_exact_size_in_bytes() = exact_size; + } + + private: int collect_fields(GrowableArray<SigEntry>* sig, int base_off = 0) const; void cleanup_blobs(); + int first_field_offset_old() const; + protected: // Returns the array class for the n'th dimension Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS); // Returns the array class with this class as element type
*** 161,171 **** instanceOop allocate_instance(TRAPS); // minimum number of bytes occupied by nonstatic fields, HeapWord aligned or pow2 int raw_value_byte_size() const; ! int first_field_offset() const; address data_for_oop(oop o) const { return ((address) (void*) o) + first_field_offset(); } --- 206,223 ---- instanceOop allocate_instance(TRAPS); // minimum number of bytes occupied by nonstatic fields, HeapWord aligned or pow2 int raw_value_byte_size() const; ! int first_field_offset() const { ! // To be refactored/simplified once old layout code and UseNewLayout are removed ! if (UseNewLayout) { ! return get_first_field_offset(); ! } else { ! return first_field_offset_old(); ! } ! }; address data_for_oop(oop o) const { return ((address) (void*) o) + first_field_offset(); }
< prev index next >