Skip to content

Commit 4ad231a

Browse files
DingliZhangRealFYang
authored andcommitted
8367066: RISC-V: refine register selection in MacroAssembler:: decode_klass_not_null
Backport-of: 0b3a303053d0eb5a98ed3d9df42c659db148b470
1 parent b105b7b commit 4ad231a

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,6 +3402,8 @@ void MacroAssembler::decode_klass_not_null(Register r, Register tmp) {
34023402

34033403
void MacroAssembler::decode_klass_not_null(Register dst, Register src, Register tmp) {
34043404
assert(UseCompressedClassPointers, "should only be used for compressed headers");
3405+
assert_different_registers(dst, tmp);
3406+
assert_different_registers(src, tmp);
34053407

34063408
if (CompressedKlassPointers::base() == nullptr) {
34073409
if (CompressedKlassPointers::shift() != 0) {
@@ -3412,18 +3414,13 @@ void MacroAssembler::decode_klass_not_null(Register dst, Register src, Register
34123414
return;
34133415
}
34143416

3415-
Register xbase = dst;
3416-
if (dst == src) {
3417-
xbase = tmp;
3418-
}
3417+
Register xbase = tmp;
34193418

3420-
assert_different_registers(src, xbase);
34213419
mv(xbase, (uintptr_t)CompressedKlassPointers::base());
34223420

34233421
if (CompressedKlassPointers::shift() != 0) {
3424-
Register t = src == dst ? dst : t0;
3425-
assert_different_registers(t, xbase);
3426-
shadd(dst, src, xbase, t, CompressedKlassPointers::shift());
3422+
// dst = (src << shift) + xbase
3423+
shadd(dst, src, xbase, dst /* temporary, dst != xbase */, CompressedKlassPointers::shift());
34273424
} else {
34283425
add(dst, xbase, src);
34293426
}

src/hotspot/cpu/riscv/riscv.ad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8932,7 +8932,7 @@ instruct encodeKlass_not_null(iRegNNoSp dst, iRegP src) %{
89328932
instruct decodeKlass_not_null(iRegPNoSp dst, iRegN src, iRegPNoSp tmp) %{
89338933
match(Set dst (DecodeNKlass src));
89348934

8935-
effect(TEMP tmp);
8935+
effect(TEMP_DEF dst, TEMP tmp);
89368936

89378937
ins_cost(ALU_COST);
89388938
format %{ "decode_klass_not_null $dst, $src\t#@decodeKlass_not_null" %}

0 commit comments

Comments
 (0)