diff options
author | Philippe Mathieu-Daudé <philmd@linaro.org> | 2024-11-03 05:30:07 -0300 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2025-07-15 00:23:09 +0200 |
commit | 263ce6008ffd15e152b8ff5ecd16a000d88276ed (patch) | |
tree | eaad367abccdff9436ebc2ad948d469198bdebcb | |
parent | 9253773cb7ff10d85ccaf4d5f418ea5c7fa31834 (diff) | |
download | qemu-263ce6008ffd15e152b8ff5ecd16a000d88276ed.zip qemu-263ce6008ffd15e152b8ff5ecd16a000d88276ed.tar.gz qemu-263ce6008ffd15e152b8ff5ecd16a000d88276ed.tar.bz2 |
target/mips: Extract gen_base_index_addr() helper
Factor out gen_base_index_addr() which is used twice
but we'll use it more.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20241111222936.59869-2-philmd@linaro.org>
-rw-r--r-- | target/mips/tcg/translate.c | 27 | ||||
-rw-r--r-- | target/mips/tcg/translate.h | 1 |
2 files changed, 14 insertions, 14 deletions
diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 5c80b03..8816237 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -1957,6 +1957,17 @@ void gen_base_offset_addr(DisasContext *ctx, TCGv addr, int base, int offset) } } +void gen_base_index_addr(DisasContext *ctx, TCGv addr, int base, int index) +{ + if (base == 0) { + gen_load_gpr(addr, index); + } else if (index == 0) { + gen_load_gpr(addr, base); + } else { + gen_op_addr_add(ctx, addr, cpu_gpr[base], cpu_gpr[index]); + } +} + static target_ulong pc_relative_pc(DisasContext *ctx) { target_ulong pc = ctx->base.pc_next; @@ -10546,13 +10557,7 @@ static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc, { TCGv t0 = tcg_temp_new(); - if (base == 0) { - gen_load_gpr(t0, index); - } else if (index == 0) { - gen_load_gpr(t0, base); - } else { - gen_op_addr_add(ctx, t0, cpu_gpr[base], cpu_gpr[index]); - } + gen_base_index_addr(ctx, t0, base, index); /* * Don't do NOP if destination is zero: we must perform the actual * memory access. @@ -11334,13 +11339,7 @@ static void gen_mips_lx(DisasContext *ctx, uint32_t opc, } t0 = tcg_temp_new(); - if (base == 0) { - gen_load_gpr(t0, offset); - } else if (offset == 0) { - gen_load_gpr(t0, base); - } else { - gen_op_addr_add(ctx, t0, cpu_gpr[base], cpu_gpr[offset]); - } + gen_base_index_addr(ctx, t0, base, offset); switch (opc) { case OPC_LBUX: diff --git a/target/mips/tcg/translate.h b/target/mips/tcg/translate.h index 428b53a..e655938 100644 --- a/target/mips/tcg/translate.h +++ b/target/mips/tcg/translate.h @@ -154,6 +154,7 @@ void check_cp1_registers(DisasContext *ctx, int regs); void check_cop1x(DisasContext *ctx); void gen_base_offset_addr(DisasContext *ctx, TCGv addr, int base, int offset); +void gen_base_index_addr(DisasContext *ctx, TCGv addr, int base, int index); void gen_move_low32(TCGv ret, TCGv_i64 arg); void gen_move_high32(TCGv ret, TCGv_i64 arg); void gen_load_gpr(TCGv t, int reg); |