target/mips: Inline translator_ld[uw,l,q]() calls
In preparation of removing the translator_ld[uw,l,q]() methods, inline them for the MIPS target, expanding MO_TE by a runtime check on mo_endian(ctx). Mechanical change using the following Coccinelle 'spatch' script: @@ expression env, db, pc; @@ ( - translator_lduw(env, db, pc) + translator_lduw_end(env, db, pc, mo_endian(ctx)) | - translator_ldl(env, db, pc) + translator_ldl_end(env, db, pc, mo_endian(ctx)) | - translator_ldq(env, db, pc) + translator_ldq_end(env, db, pc, mo_endian(ctx)) ) Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20260417042620.35329-4-philmd@linaro.org>
Philippe Mathieu-Daudé committed
Nov 27, 2025 at 17:00 UTC
0359e4150236efd0b0e7dff3cec83b9c213f46b6
4 files changed
+16
-9
target/mips/tcg/micromips_translate.c.inc
+1
-1
@@ -1629,7 +1629,7 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
1629
uint32_t op, minor, minor2, mips32_op;
1630
uint32_t cond, fmt, cc;
1631
1632
- insn = translator_lduw(env, &ctx->base, ctx->base.pc_next + 2);
1632
+ insn = translator_lduw_end(env, &ctx->base, ctx->base.pc_next + 2, mo_endian(ctx));
1633
ctx->opcode = (ctx->opcode << 16) | insn;
1634
1635
rt = (ctx->opcode >> 21) & 0x1f;
target/mips/tcg/mips16e_translate.c.inc
+4
-2
@@ -453,7 +453,8 @@ static void decode_i64_mips16(DisasContext *ctx,
453
454
static int decode_extended_mips16_opc(CPUMIPSState *env, DisasContext *ctx)
455
{
456
- int extend = translator_lduw(env, &ctx->base, ctx->base.pc_next + 2);
456
+ int extend = translator_lduw_end(env, &ctx->base, ctx->base.pc_next + 2,
457
+ mo_endian(ctx));
458
int op, rx, ry, funct, sa;
459
int16_t imm, offset;
460
@@ -686,7 +687,8 @@ static int decode_ase_mips16e(CPUMIPSState *env, DisasContext *ctx)
687
/* No delay slot, so just process as a normal instruction */
688
break;
689
case M16_OPC_JAL:
689
- offset = translator_lduw(env, &ctx->base, ctx->base.pc_next + 2);
690
+ offset = translator_lduw_end(env, &ctx->base, ctx->base.pc_next + 2,
691
+ mo_endian(ctx));
692
offset = (((ctx->opcode & 0x1f) << 21)
693
| ((ctx->opcode >> 5) & 0x1f) << 16
694
| offset) << 2;
target/mips/tcg/nanomips_translate.c.inc
+3
-2
@@ -3551,7 +3551,7 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
3551
int offset;
3552
int imm;
3553
3554
- insn = translator_lduw(env, &ctx->base, ctx->base.pc_next + 2);
3554
+ insn = translator_lduw_end(env, &ctx->base, ctx->base.pc_next + 2, mo_endian(ctx));
3555
ctx->opcode = (ctx->opcode << 16) | insn;
3556
3557
rt = extract32(ctx->opcode, 21, 5);
@@ -3665,7 +3665,8 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
3665
break;
3666
case NM_P48I:
3667
{
3668
- insn = translator_lduw(env, &ctx->base, ctx->base.pc_next + 4);
3668
+ insn = translator_lduw_end(env, &ctx->base, ctx->base.pc_next + 4,
3669
+ mo_endian(ctx));
3670
target_long addr_off = extract32(ctx->opcode, 0, 16) | insn << 16;
3671
switch (extract32(ctx->opcode, 16, 5)) {
3672
case NM_LI48:
target/mips/tcg/translate.c
+8
-4
@@ -15149,17 +15149,21 @@ static void mips_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
15149
15150
is_slot = ctx->hflags & MIPS_HFLAG_BMASK;
15151
if (ctx->insn_flags & ISA_NANOMIPS32) {
15152
- ctx->opcode = translator_lduw(env, &ctx->base, ctx->base.pc_next);
15152
+ ctx->opcode = translator_lduw_end(env, &ctx->base, ctx->base.pc_next,
15153
+ mo_endian(ctx));
15154
insn_bytes = decode_isa_nanomips(env, ctx);
15155
} else if (!(ctx->hflags & MIPS_HFLAG_M16)) {
15155
- ctx->opcode = translator_ldl(env, &ctx->base, ctx->base.pc_next);
15156
+ ctx->opcode = translator_ldl_end(env, &ctx->base, ctx->base.pc_next,
15157
+ mo_endian(ctx));
15158
insn_bytes = 4;
15159
decode_opc(env, ctx);
15160
} else if (ctx->insn_flags & ASE_MICROMIPS) {
15159
- ctx->opcode = translator_lduw(env, &ctx->base, ctx->base.pc_next);
15161
+ ctx->opcode = translator_lduw_end(env, &ctx->base, ctx->base.pc_next,
15162
+ mo_endian(ctx));
15163
insn_bytes = decode_isa_micromips(env, ctx);
15164
} else if (ctx->insn_flags & ASE_MIPS16) {
15162
- ctx->opcode = translator_lduw(env, &ctx->base, ctx->base.pc_next);
15165
+ ctx->opcode = translator_lduw_end(env, &ctx->base, ctx->base.pc_next,
15166
+ mo_endian(ctx));
15167
insn_bytes = decode_ase_mips16e(env, ctx);
15168
} else {
15169
gen_reserved_instruction(ctx);