< prev index next >
src/hotspot/share/oops/valueKlass.hpp
Print this page
*** 117,126 ****
--- 117,169 ----
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();
protected:
< prev index next >