From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH 00/28] tcg: bswap improvements
Date: Mon, 14 Jun 2021 01:37:32 -0700 [thread overview]
Message-ID: <20210614083800.1166166-1-richard.henderson@linaro.org> (raw)
This has been on my to-do list for several years, and I've
finally spent a rainy weekend doing something about it.
The current tcg bswap opcode is fairly strict: for swaps smaller
than the TCGv size, it requires zero-extended input and provides
zero-extended output.
This has meant that various tcg/ backends have their own handling
of bswap when it comes to memory, to minimize overhead for stores
(which do not care about zero-extended output) or for signed loads
(which would rather not sign-extend after zero-extending).
Solve this by adding some operation flags to the tcg bswap opcode:
TCG_BSWAP_IZ -- Input is Zero extended
TCG_BSWAP_OZ -- Output is Zero extended
TCG_BSWAP_OS -- Output is Sign extended
For instance, bswap before store would not set any of these flags,
allowing unextended input and producing unextended output.
The patch set can be broken into sections:
* patches 1 - 16 implement the functionality in the backend,
but do not provide the interface to use it,
* patch 17 enables the interface,
* patches 18 - 25 use the new interface in the front ends
* patches 26 - 28 remove some tcg backend complexity,
leaving the bswap handling to the middle-end.
r~
Richard Henderson (28):
tcg: Add flags argument to bswap opcodes
tcg/i386: Support bswap flags
tcg/aarch64: Support bswap flags
tcg/arm: Support bswap flags
tcg/ppc: Split out tcg_out_ext{8,16,32}s
tcg/ppc: Split out tcg_out_sari{32,64}
tcg/ppc: Split out tcg_out_bswap16
tcg/ppc: Split out tcg_out_bswap32
tcg/ppc: Split out tcg_out_bswap64
tcg/ppc: Support bswap flags
tcg/ppc: Use power10 byte-reverse instructions
tcg/s390: Support bswap flags
tcg/mips: Support bswap flags in tcg_out_bswap16
tcg/mips: Support bswap flags in tcg_out_bswap32
tcg/tci: Support bswap flags
tcg: Handle new bswap flags during optimize
tcg: Add flags argument to tcg_gen_bswap16_*, tcg_gen_bswap32_i64
tcg: Make use of bswap flags in tcg_gen_qemu_ld_*
tcg: Make use of bswap flags in tcg_gen_qemu_st_*
target/arm: Improve REV32
target/arm: Improve vector REV
target/arm: Improve REVSH
target/i386: Improve bswap translation
target/sh4: Improve swap.b translation
target/mips: Fix gen_mxu_s32ldd_s32lddr
tcg/arm: Unset TCG_TARGET_HAS_MEMORY_BSWAP
tcg/aarch64: Unset TCG_TARGET_HAS_MEMORY_BSWAP
tcg/riscv: Remove MO_BSWAP handling
include/tcg/tcg-op.h | 8 +-
include/tcg/tcg-opc.h | 10 +-
include/tcg/tcg.h | 12 ++
tcg/aarch64/tcg-target.h | 2 +-
tcg/arm/tcg-target.h | 2 +-
target/arm/translate-a64.c | 21 +--
target/arm/translate.c | 4 +-
target/i386/tcg/translate.c | 14 +-
target/mips/tcg/mxu_translate.c | 6 +-
target/s390x/translate.c | 4 +-
target/sh4/translate.c | 3 +-
tcg/optimize.c | 56 ++++++-
tcg/tcg-op.c | 143 +++++++++++------
tcg/tci.c | 3 +-
tcg/aarch64/tcg-target.c.inc | 99 +++++-------
tcg/arm/tcg-target.c.inc | 272 ++++++++++++--------------------
tcg/i386/tcg-target.c.inc | 20 ++-
tcg/mips/tcg-target.c.inc | 99 ++++++------
tcg/ppc/tcg-target.c.inc | 199 ++++++++++++++---------
tcg/riscv/tcg-target.c.inc | 64 ++++----
tcg/s390/tcg-target.c.inc | 34 +++-
tcg/tci/tcg-target.c.inc | 23 ++-
tcg/README | 18 ++-
23 files changed, 607 insertions(+), 509 deletions(-)
--
2.25.1
next reply other threads:[~2021-06-14 8:40 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-14 8:37 Richard Henderson [this message]
2021-06-14 8:37 ` [PATCH 01/28] tcg: Add flags argument to bswap opcodes Richard Henderson
2021-06-14 9:19 ` Philippe Mathieu-Daudé
2021-06-14 11:49 ` Alex Bennée
2021-06-14 14:43 ` Richard Henderson
2021-06-21 13:41 ` Peter Maydell
2021-06-21 13:51 ` Peter Maydell
2021-06-21 14:02 ` Richard Henderson
2021-06-21 14:15 ` Peter Maydell
2021-06-21 13:59 ` Richard Henderson
2021-06-14 8:37 ` [PATCH 02/28] tcg/i386: Support bswap flags Richard Henderson
2021-06-21 13:53 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 03/28] tcg/aarch64: " Richard Henderson
2021-06-21 14:01 ` Peter Maydell
2021-06-21 14:04 ` Richard Henderson
2021-06-21 18:12 ` Richard Henderson
2021-06-21 19:40 ` Peter Maydell
2021-06-21 19:50 ` Richard Henderson
2021-06-21 19:52 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 04/28] tcg/arm: " Richard Henderson
2021-06-21 14:09 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 05/28] tcg/ppc: Split out tcg_out_ext{8,16,32}s Richard Henderson
2021-06-21 14:18 ` Peter Maydell
2021-06-21 20:44 ` Philippe Mathieu-Daudé
2021-06-14 8:37 ` [PATCH 06/28] tcg/ppc: Split out tcg_out_sari{32,64} Richard Henderson
2021-06-21 14:22 ` Peter Maydell
2021-06-21 14:23 ` Richard Henderson
2021-06-14 8:37 ` [PATCH 07/28] tcg/ppc: Split out tcg_out_bswap16 Richard Henderson
2021-06-21 14:29 ` Peter Maydell
2021-06-21 14:41 ` Richard Henderson
2021-06-14 8:37 ` [PATCH 08/28] tcg/ppc: Split out tcg_out_bswap32 Richard Henderson
2021-06-21 14:30 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 09/28] tcg/ppc: Split out tcg_out_bswap64 Richard Henderson
2021-06-21 14:35 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 10/28] tcg/ppc: Support bswap flags Richard Henderson
2021-06-21 14:38 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 11/28] tcg/ppc: Use power10 byte-reverse instructions Richard Henderson
2021-06-14 8:37 ` [PATCH 12/28] tcg/s390: Support bswap flags Richard Henderson
2021-06-14 8:37 ` [PATCH 13/28] tcg/mips: Support bswap flags in tcg_out_bswap16 Richard Henderson
2021-06-22 6:36 ` Philippe Mathieu-Daudé
2021-06-22 13:54 ` Richard Henderson
2021-06-14 8:37 ` [PATCH 14/28] tcg/mips: Support bswap flags in tcg_out_bswap32 Richard Henderson
2021-06-14 9:31 ` Philippe Mathieu-Daudé
2021-06-14 15:49 ` Richard Henderson
2021-06-14 8:37 ` [PATCH 15/28] tcg/tci: Support bswap flags Richard Henderson
2021-06-14 9:33 ` Philippe Mathieu-Daudé
2021-06-14 8:37 ` [PATCH 16/28] tcg: Handle new bswap flags during optimize Richard Henderson
2021-06-21 14:47 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 17/28] tcg: Add flags argument to tcg_gen_bswap16_*, tcg_gen_bswap32_i64 Richard Henderson
2021-06-14 9:41 ` Philippe Mathieu-Daudé
2021-06-14 15:58 ` Richard Henderson
2021-06-22 10:20 ` Philippe Mathieu-Daudé
2021-06-22 13:56 ` Richard Henderson
2021-06-21 15:01 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 18/28] tcg: Make use of bswap flags in tcg_gen_qemu_ld_* Richard Henderson
2021-06-21 15:04 ` Peter Maydell
2021-06-22 6:41 ` Philippe Mathieu-Daudé
2021-06-14 8:37 ` [PATCH 19/28] tcg: Make use of bswap flags in tcg_gen_qemu_st_* Richard Henderson
2021-06-21 15:05 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 20/28] target/arm: Improve REV32 Richard Henderson
2021-06-14 9:08 ` Philippe Mathieu-Daudé
2021-06-21 15:08 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 21/28] target/arm: Improve vector REV Richard Henderson
2021-06-21 15:10 ` Peter Maydell
2021-06-22 6:44 ` Philippe Mathieu-Daudé
2021-06-14 8:37 ` [PATCH 22/28] target/arm: Improve REVSH Richard Henderson
2021-06-14 9:42 ` Philippe Mathieu-Daudé
2021-06-21 15:11 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 23/28] target/i386: Improve bswap translation Richard Henderson
2021-06-21 15:15 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 24/28] target/sh4: Improve swap.b translation Richard Henderson
2021-06-21 15:16 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 25/28] target/mips: Fix gen_mxu_s32ldd_s32lddr Richard Henderson
2021-06-21 20:59 ` Philippe Mathieu-Daudé
2021-06-14 8:37 ` [PATCH 26/28] tcg/arm: Unset TCG_TARGET_HAS_MEMORY_BSWAP Richard Henderson
2021-06-21 15:31 ` Peter Maydell
2021-06-14 8:37 ` [PATCH 27/28] tcg/aarch64: " Richard Henderson
2021-06-21 15:33 ` Peter Maydell
2021-06-14 8:38 ` [PATCH 28/28] tcg/riscv: Remove MO_BSWAP handling Richard Henderson
2021-06-18 6:30 ` Alistair Francis
2021-06-14 22:41 ` [PATCH 00/28] tcg: bswap improvements no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210614083800.1166166-1-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).