aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2024-10-10 16:46:26 -0300
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2024-10-15 12:18:10 -0300
commitde0029664f7f57df2c7c9209f7fa31b3929c8a1e (patch)
treea05b6c85ab49a3c840121709cc8646f74fb04bd6
parent2803e24694c0051ba72bf92ded49a459209537c9 (diff)
downloadqemu-de0029664f7f57df2c7c9209f7fa31b3929c8a1e.zip
qemu-de0029664f7f57df2c7c9209f7fa31b3929c8a1e.tar.gz
qemu-de0029664f7f57df2c7c9209f7fa31b3929c8a1e.tar.bz2
target/mips: Have gen_addiupc() expand $pc during translation
Suggested-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20241010215015.44326-12-philmd@linaro.org>
-rw-r--r--target/mips/tcg/translate.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c
index c0b9753..0ccf32d 100644
--- a/target/mips/tcg/translate.c
+++ b/target/mips/tcg/translate.c
@@ -11428,20 +11428,18 @@ static void gen_compute_compact_branch(DisasContext *ctx, uint32_t opc,
void gen_addiupc(DisasContext *ctx, int rx, int imm,
int is_64_bit, int extended)
{
- TCGv t0;
+ target_ulong npc;
if (extended && (ctx->hflags & MIPS_HFLAG_BMASK)) {
gen_reserved_instruction(ctx);
return;
}
- t0 = tcg_temp_new();
-
- tcg_gen_movi_tl(t0, pc_relative_pc(ctx));
- tcg_gen_addi_tl(cpu_gpr[rx], t0, imm);
+ npc = pc_relative_pc(ctx) + imm;
if (!is_64_bit) {
- tcg_gen_ext32s_tl(cpu_gpr[rx], cpu_gpr[rx]);
+ npc = (int32_t)npc;
}
+ tcg_gen_movi_tl(cpu_gpr[rx], npc);
}
static void gen_cache_operation(DisasContext *ctx, uint32_t op, int base,