-
Bug
-
Resolution: Fixed
-
P4
-
26
-
b15
-
riscv
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8367586 | 25.0.2 | Dingli Zhang | P4 | Resolved | Fixed | master |
Previously, the register selection in MacroAssembler:: decode_klass_not_null is misleading, better to refine it.
diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
index 1436bc02113..06186079cf8 100644
--- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
+++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
@@ -3421,8 +3421,9 @@ 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 ? t0 : dst;
assert_different_registers(t, xbase);
+ // dst = (src << shift) + xbase
shadd(dst, src, xbase, t, CompressedKlassPointers::shift());
} else {
add(dst, xbase, src);
diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
index 1436bc02113..06186079cf8 100644
--- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
+++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
@@ -3421,8 +3421,9 @@ 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 ? t0 : dst;
assert_different_registers(t, xbase);
+ // dst = (src << shift) + xbase
shadd(dst, src, xbase, t, CompressedKlassPointers::shift());
} else {
add(dst, xbase, src);
- backported by
-
JDK-8367586 RISC-V: refine register selection in MacroAssembler:: decode_klass_not_null
-
- Resolved
-
- links to
-
Commit(master) openjdk/jdk25u/4ad231aa
-
Commit(master) openjdk/jdk/0b3a3030
-
Review(master) openjdk/jdk25u/185
-
Review(master) openjdk/jdk/27138