RFR: 8367066: RISC-V: refine register selection in MacroAssembler:: decode_klass_not_null
Fei Yang
fyang at openjdk.org
Mon Sep 8 11:33:11 UTC 2025
On Mon, 8 Sep 2025 08:57:15 GMT, Hamlin Li <mli at openjdk.org> wrote:
> Hi,
> Can you help to review this patch?
>
> Previously, the register selection in MacroAssembler:: decode_klass_not_null is misleading, better to refine it to improve the readability.
>
> Thanks!
>
> Running runtime test tier1/2/3...
Hi, seems we can further eliminate the use of `t0` replacing it with `tmp`. How about we go like this?
diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
index 1436bc02113..89e615b1cbb 100644
--- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
+++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
@@ -3402,6 +3402,8 @@ void MacroAssembler::decode_klass_not_null(Register r, Register tmp) {
void MacroAssembler::decode_klass_not_null(Register dst, Register src, Register tmp) {
assert(UseCompressedClassPointers, "should only be used for compressed headers");
+ assert_different_registers(src, tmp);
+ assert_different_registers(dst, tmp);
if (CompressedKlassPointers::base() == nullptr) {
if (CompressedKlassPointers::shift() != 0) {
@@ -3421,7 +3423,7 @@ void MacroAssembler::decode_klass_not_null(Register dst, Register src, Register
mv(xbase, (uintptr_t)CompressedKlassPointers::base());
if (CompressedKlassPointers::shift() != 0) {
- Register t = src == dst ? dst : t0;
+ Register t = dst == xbase ? tmp : dst;
assert_different_registers(t, xbase);
shadd(dst, src, xbase, t, CompressedKlassPointers::shift());
} else {
-------------
PR Review: https://git.openjdk.org/jdk/pull/27138#pullrequestreview-3196116708
More information about the hotspot-dev
mailing list