@samitouri / QOSamiQemu / commits / 8a7746eb8f

target/riscv: Replace MO_TE by mo_endian (MIPS extension)

Replace compile-time MO_TE evaluation by runtime mo_endian() one, which expand target endianness from DisasContext. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260318103122.97244-12-philmd@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Philippe Mathieu-Daudé committed Mar 18, 2026 at 11:31 UTC 8a7746eb8f22944d2cc146cf10fc49d0dcdb0e49
1 file changed +16 -8
target/riscv/insn_trans/trans_xmips.c.inc
+16 -8
@@ -47,6 +47,8 @@ static bool trans_ccmov(DisasContext *ctx, arg_ccmov *a)
47 /* Load Doubleword Pair. */
48 static bool trans_ldp(DisasContext *ctx, arg_ldp *a)
49 {
50 + MemOp memop = MO_SQ | mo_endian(ctx);
51 +
52 REQUIRE_XMIPSLSP(ctx);
53 REQUIRE_64_OR_128BIT(ctx);
54
@@ -56,11 +58,11 @@ static bool trans_ldp(DisasContext *ctx, arg_ldp *a)
58 TCGv addr = tcg_temp_new();
59
60 tcg_gen_addi_tl(addr, src, a->imm_y);
59 - tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TE | MO_SQ);
61 + tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, memop);
62 gen_set_gpr(ctx, a->rd, dest0);
63
64 tcg_gen_addi_tl(addr, addr, 8);
63 - tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TE | MO_SQ);
65 + tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, memop);
66 gen_set_gpr(ctx, a->rs3, dest1);
67
68 return true;
@@ -69,6 +71,8 @@ static bool trans_ldp(DisasContext *ctx, arg_ldp *a)
71 /* Load Word Pair. */
72 static bool trans_lwp(DisasContext *ctx, arg_lwp *a)
73 {
74 + MemOp memop = MO_SL | mo_endian(ctx);
75 +
76 REQUIRE_XMIPSLSP(ctx);
77
78 TCGv src = get_gpr(ctx, a->rs1, EXT_NONE);
@@ -77,11 +81,11 @@ static bool trans_lwp(DisasContext *ctx, arg_lwp *a)
81 TCGv addr = tcg_temp_new();
82
83 tcg_gen_addi_tl(addr, src, a->imm_x);
80 - tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TE | MO_SL);
84 + tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, memop);
85 gen_set_gpr(ctx, a->rd, dest0);
86
87 tcg_gen_addi_tl(addr, addr, 4);
84 - tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TE | MO_SL);
88 + tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, memop);
89 gen_set_gpr(ctx, a->rs3, dest1);
90
91 return true;
@@ -90,6 +94,8 @@ static bool trans_lwp(DisasContext *ctx, arg_lwp *a)
94 /* Store Doubleword Pair. */
95 static bool trans_sdp(DisasContext *ctx, arg_sdp *a)
96 {
97 + MemOp memop = MO_UQ | mo_endian(ctx);
98 +
99 REQUIRE_XMIPSLSP(ctx);
100 REQUIRE_64_OR_128BIT(ctx);
101
@@ -99,10 +105,10 @@ static bool trans_sdp(DisasContext *ctx, arg_sdp *a)
105 TCGv addr = tcg_temp_new();
106
107 tcg_gen_addi_tl(addr, src, a->imm_w);
102 - tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TE | MO_UQ);
108 + tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, memop);
109
110 tcg_gen_addi_tl(addr, addr, 8);
105 - tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TE | MO_UQ);
111 + tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, memop);
112
113 return true;
114 }
@@ -110,6 +116,8 @@ static bool trans_sdp(DisasContext *ctx, arg_sdp *a)
116 /* Store Word Pair. */
117 static bool trans_swp(DisasContext *ctx, arg_swp *a)
118 {
119 + MemOp memop = MO_SL | mo_endian(ctx);
120 +
121 REQUIRE_XMIPSLSP(ctx);
122
123 TCGv src = get_gpr(ctx, a->rs1, EXT_NONE);
@@ -118,10 +126,10 @@ static bool trans_swp(DisasContext *ctx, arg_swp *a)
126 TCGv addr = tcg_temp_new();
127
128 tcg_gen_addi_tl(addr, src, a->imm_v);
121 - tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TE | MO_SL);
129 + tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, memop);
130
131 tcg_gen_addi_tl(addr, addr, 4);
124 - tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TE | MO_SL);
132 + tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, memop);
133
134 return true;
135 }