Commit 62a1000090 for qemu.org
commit 62a10000903fe02b8f5e886f0fbc91209e53e7d5
Author: Richard Henderson <richard.henderson@linaro.org>
Date: Fri Jul 31 11:56:26 2026 -0700
target/s390x/tcg: Use op_st for STORE REVERSED
Use the MemOp parameter to op_st to directly perform a
little-endian store, rather than a separate byte reverse
before the store.
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260731185628.23161-14-richard.henderson@linaro.org>
diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
index 64711855f3..854ec37d30 100644
--- a/target/s390x/tcg/insn-data.h.inc
+++ b/target/s390x/tcg/insn-data.h.inc
@@ -882,9 +882,9 @@
/* STORE HIGH ON CONDITION */
D(0xebe1, STOCFH, RSY_b, LOC2, 0, 0, 0, 0, soc, 0, 2)
/* STORE REVERSED */
- C(0xe33f, STRVH, RXY_a, Z, la2, r1_16u, new, m1_16, rev16, 0)
- C(0xe33e, STRV, RXY_a, Z, la2, r1_32u, new, m1_32, rev32, 0)
- C(0xe32f, STRVG, RXY_a, Z, la2, r1_o, new, m1_64, rev64, 0)
+ D(0xe33f, STRVH, RXY_a, Z, r1_o, a2, 0, 0, st, 0, MO_LEUW)
+ D(0xe33e, STRV, RXY_a, Z, r1_o, a2, 0, 0, st, 0, MO_LEUL)
+ D(0xe32f, STRVG, RXY_a, Z, r1_o, a2, 0, 0, st, 0, MO_LEUQ)
/* STORE CLOCK */
F(0xb205, STCK, S, Z, la2, 0, new, 0, stck, 0, IF_IO)
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
index 1250b2dd7f..0449fc2cee 100644
--- a/target/s390x/tcg/translate.c
+++ b/target/s390x/tcg/translate.c
@@ -3713,12 +3713,6 @@ static DisasJumpType op_rosbg(DisasContext *s, DisasOps *o)
return DISAS_NEXT;
}
-static DisasJumpType op_rev16(DisasContext *s, DisasOps *o)
-{
- tcg_gen_bswap16_i64(o->out, o->in2, TCG_BSWAP_IZ | TCG_BSWAP_OZ);
- return DISAS_NEXT;
-}
-
static DisasJumpType op_rev32(DisasContext *s, DisasOps *o)
{
tcg_gen_bswap32_i64(o->out, o->in2, TCG_BSWAP_IZ | TCG_BSWAP_OZ);
@@ -5545,13 +5539,6 @@ static void in2_r1_o(DisasContext *s, DisasOps *o)
}
#define SPEC_in2_r1_o 0
-static void in2_r1_16u(DisasContext *s, DisasOps *o)
-{
- o->in2 = tcg_temp_new_i64();
- tcg_gen_ext16u_i64(o->in2, regs[get_field(s, r1)]);
-}
-#define SPEC_in2_r1_16u 0
-
static void in2_r1_32u(DisasContext *s, DisasOps *o)
{
o->in2 = tcg_temp_new_i64();