[master] RFR: Load narrowKlass from header, AArch64 assembler implementation [v7]
Andrew Haley
aph at openjdk.java.net
Tue Feb 1 18:31:47 UTC 2022
On Tue, 1 Feb 2022 13:15:13 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:
>
> Cleanup remaining uses of klass_offset_in_bytes in aarch64
It looks good now.
Having said that, the convention is mostly that macros can use rscratchN registers freely internally, and that any caller needs to be aware of that.
Here is the opposite of that convention: `load_nklass` carefully avoids clobbering `rscratch1` and `rscratch2` in order to make things easier for the caller. So, while this is something of a surprise for the maintainer, it's an elegant way to solve the problem.
-------------
Marked as reviewed by aph (Committer).
PR: https://git.openjdk.java.net/lilliput/pull/36
More information about the lilliput-dev
mailing list