|
53 | 53 | #include "utilities/copy.hpp" |
54 | 54 | #include "utilities/stringUtils.hpp" |
55 | 55 |
|
| 56 | +InlineKlass::Members::Members() |
| 57 | + : _extended_sig(nullptr), |
| 58 | + _return_regs(nullptr), |
| 59 | + _pack_handler(nullptr), |
| 60 | + _pack_handler_jobject(nullptr), |
| 61 | + _unpack_handler(nullptr), |
| 62 | + _null_reset_value_offset(0), |
| 63 | + _payload_offset(-1), |
| 64 | + _payload_size_in_bytes(-1), |
| 65 | + _payload_alignment(-1), |
| 66 | + _non_atomic_size_in_bytes(-1), |
| 67 | + _non_atomic_alignment(-1), |
| 68 | + _atomic_size_in_bytes(-1), |
| 69 | + _nullable_size_in_bytes(-1), |
| 70 | + _null_marker_offset(-1) { |
| 71 | +} |
| 72 | + |
56 | 73 | InlineKlass::InlineKlass() { |
57 | 74 | assert(CDSConfig::is_dumping_archive() || UseSharedSpaces, "only for CDS"); |
58 | 75 | } |
59 | 76 |
|
60 | | - // Constructor |
| 77 | +// Constructor |
61 | 78 | InlineKlass::InlineKlass(const ClassFileParser& parser) |
62 | 79 | : InstanceKlass(parser, InlineKlass::Kind, markWord::inline_type_prototype()) { |
63 | 80 | assert(is_inline_klass(), "sanity"); |
64 | 81 | assert(prototype_header().is_inline_type(), "sanity"); |
65 | 82 |
|
66 | | - // Set up the offset to the InstanceKlassFixedBlock of this klass |
67 | | - _adr_inlineklass_fixed_block = new (calculate_fixed_block_address()) InlineKlassFixedBlock; |
| 83 | + // Set up the offset to the members of this klass |
| 84 | + _adr_inline_klass_members = calculate_members_address(); |
68 | 85 |
|
69 | | - // Addresses used for inline type calling convention |
70 | | - set_extended_sig(nullptr); |
71 | | - set_return_regs(nullptr); |
72 | | - set_pack_handler(nullptr); |
73 | | - set_pack_handler_jobject(nullptr); |
74 | | - set_unpack_handler(nullptr); |
| 86 | + // Placement install the members |
| 87 | + new (_adr_inline_klass_members) Members(); |
75 | 88 |
|
| 89 | + // Sanity check construction of the members |
76 | 90 | assert(pack_handler() == nullptr, "pack handler not null"); |
77 | | - |
78 | | - set_null_reset_value_offset(0); |
79 | | - set_payload_offset(-1); |
80 | | - set_payload_size_in_bytes(-1); |
81 | | - set_payload_alignment(-1); |
82 | | - set_non_atomic_size_in_bytes(-1); |
83 | | - set_non_atomic_alignment(-1); |
84 | | - set_atomic_size_in_bytes(-1); |
85 | | - set_nullable_size_in_bytes(-1); |
86 | | - set_null_marker_offset(-1); |
87 | 91 | } |
88 | 92 |
|
89 | | -address InlineKlass::calculate_fixed_block_address() const { |
90 | | - // The fix block is placed after all other fields inherited from the InstanceKlass |
| 93 | +address InlineKlass::calculate_members_address() const { |
| 94 | + // The members are placed after all other contents inherited from the InstanceKlass |
91 | 95 | return end_of_instance_klass(); |
92 | 96 | } |
93 | 97 |
|
@@ -429,11 +433,11 @@ void InlineKlass::initialize_calling_convention(TRAPS) { |
429 | 433 |
|
430 | 434 | void InlineKlass::deallocate_contents(ClassLoaderData* loader_data) { |
431 | 435 | if (extended_sig() != nullptr) { |
432 | | - MetadataFactory::free_array<SigEntry>(loader_data, fixed_block()._extended_sig); |
| 436 | + MetadataFactory::free_array<SigEntry>(loader_data, members()._extended_sig); |
433 | 437 | set_extended_sig(nullptr); |
434 | 438 | } |
435 | 439 | if (return_regs() != nullptr) { |
436 | | - MetadataFactory::free_array<VMRegPair>(loader_data, fixed_block()._return_regs); |
| 440 | + MetadataFactory::free_array<VMRegPair>(loader_data, members()._return_regs); |
437 | 441 | set_return_regs(nullptr); |
438 | 442 | } |
439 | 443 | cleanup_blobs(); |
@@ -651,8 +655,8 @@ void InlineKlass::remove_unshareable_info() { |
651 | 655 | InstanceKlass::remove_unshareable_info(); |
652 | 656 |
|
653 | 657 | // update it to point to the "buffered" copy of this class. |
654 | | - _adr_inlineklass_fixed_block = reinterpret_cast<InlineKlassFixedBlock*>(calculate_fixed_block_address()); |
655 | | - ArchivePtrMarker::mark_pointer((address*)&_adr_inlineklass_fixed_block); |
| 658 | + _adr_inline_klass_members = calculate_members_address(); |
| 659 | + ArchivePtrMarker::mark_pointer(&_adr_inline_klass_members); |
656 | 660 |
|
657 | 661 | set_extended_sig(nullptr); |
658 | 662 | set_return_regs(nullptr); |
|
0 commit comments