RFR: 8285303: riscv: Incorrect register mask in call_native_base
Fei Yang
fyang at openjdk.java.net
Fri Apr 22 03:13:24 UTC 2022
On Fri, 22 Apr 2022 02:02:01 GMT, Feilong Jiang <fjiang at openjdk.org> wrote:
> In `MacroAssembler::call_native_base`, t0 and xmethod should be saved as expected:
>
>
> void MacroAssembler::call_native_base(address entry_point, Label *retaddr) {
> Label E, L;
> int32_t offset = 0;
> push_reg(0x80000040, sp); // push << t0 & xmethod >> to sp
> movptr_with_offset(t0, entry_point, offset);
> jalr(x1, t0, offset);
> if (retaddr != NULL) {
> bind(*retaddr);
> }
> pop_reg(0x80000040, sp); // pop << t0 & xmethod >> from sp
> }
>
>
> Register mask of '0x80000040' operates << t1 & xmethod >> here, which should be '0x80000020' for << t0 & xmethod >>.
>
> This PR also removes `MacroAssembler::call_native_base` and `MacroAssembler::call_native_base`, expands the definitions of `call_native_base` to `MacroAssembler::call_VM_leaf_base` directly.
>
> Linux RISCV64 release hotspot/jdk tier1 tests are passed on QEMU.
Thanks for fixing this typo. I think register t0 is not alive at the callsites so it's never triggered.
-------------
Marked as reviewed by fyang (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/8353
More information about the hotspot-dev
mailing list