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