[PATCH 13/14] target/s390x: Use op_st for STORE REVERSED
Richard Henderson <[email protected]> Fri, 31 Jul 2026 11:56:26 -0700
| Newsgroups | org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Use the MemOp parameter to op_st to directly perform a little-endian store, rather than a separate byte reverse before the store. Signed-off-by: Richard Henderson <[email protected]> --- target/s390x/tcg/translate.c | 13 ------------- target/s390x/tcg/insn-data.h.inc | 6 +++--- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 7c1961567d..09c5541615 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); @@ -5543,13 +5537,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(); diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc index 691f8222ab..774a3cec36 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, m1_64, stck, 0, IF_IO) -- 2.43.0