When guest base is zero, we should use addr_regl as base regiser instead of the initial register TCG_REG_TMP0.
Signed-off-by: LIU Zhiwei <zhiwei_...@linux.alibaba.com> --- tcg/riscv/tcg-target.c.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 81a83e45b1..32f4bc7bfc 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1185,6 +1185,8 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is_64) } if (guest_base != 0) { tcg_out_opc_reg(s, OPC_ADD, base, TCG_GUEST_BASE_REG, addr_regl); + } else { + base = addr_regl; } tcg_out_qemu_ld_direct(s, data_regl, data_regh, base, opc, is_64); #endif @@ -1257,6 +1259,8 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is_64) } if (guest_base != 0) { tcg_out_opc_reg(s, OPC_ADD, base, TCG_GUEST_BASE_REG, addr_regl); + } else { + base = addr_regl; } tcg_out_qemu_st_direct(s, data_regl, data_regh, base, opc); #endif -- 2.25.1