[master] RFR: Load narrowKlass from header, AArch64 assembler implementation [v2]

Andrew Haley aph at openjdk.java.net
Thu Jan 27 14:31:10 UTC 2022


On Thu, 27 Jan 2022 13:51:42 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

>> This implements MacroAssembler::load_klass() to load the (narrow)Klass* from object header. Just like the x86_64 implementation, it checks whether it can take the fast path (object unlocked -> load from upper 32bits of header), or else calls the runtime to get a stable header and load from that.
>> 
>> It adds a runtime call stub, which will also be used in the C2 implementation. It also adds nklass_offset_in_bytes() which will also be used in C2 impl. The part in generate_verify_oop() is a little nasty, I added a comment that explains what's going on.
>> 
>> Testing:
>>  - [x] tier1 (aarch64)
>>  - [x] tier2 (aarch64)
>>  - [x] tier3 (aarch64)
>
> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Add asserts

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 3718:

> 3716:   eor(tmp, tmp, markWord::unlocked_value);
> 3717:   tst(tmp, markWord::lock_mask_in_place);
> 3718:   br(Assembler::NE, slow);

Suggestion:

  tbnz(tmp, exact_log2(markWord::lock_mask_in_place), slow);

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 3722:

> 3720:   // Fast-path: shift and decode Klass*.
> 3721:   mov(dst, tmp);
> 3722:   lsr(dst, dst, markWord::klass_shift);

Suggestion:

  lsr(dst, tmp, markWord::klass_shift);

-------------

PR: https://git.openjdk.java.net/lilliput/pull/36


More information about the lilliput-dev mailing list