RFR: 8285303: riscv: Incorrect register mask in call_native_base

Feilong Jiang fjiang at openjdk.java.net
Fri Apr 22 02:11:48 UTC 2022


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.

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

Commit messages:
 - fix incorrect reg mask of call_VM_leaf_base

Changes: https://git.openjdk.java.net/jdk/pull/8353/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8353&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8285303
  Stats: 19 lines in 2 files changed: 0 ins; 17 del; 2 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8353.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8353/head:pull/8353

PR: https://git.openjdk.java.net/jdk/pull/8353


More information about the hotspot-dev mailing list