Better tested this time, including aarch64 host.
Changes since v1:
* Added tcg_gen_deposit_z_*. Depositing into zero turns out to be
quite common among targets. Providing that as a primitive expander
allows us to easily generate optimal-ish code for hosts with and
without a real deposit operation.
* Cleanups in tcg/s390 akin to those I already did for tcg/arm.
* Add support in tcg/s390 for deposit into zero.
* More special cases in the expanders for better code generation,
especially on an x86 host *without* the extract primitives.
* Silly think-o on aarch64 host.
r~
Richard Henderson (18):
tcg: Add field extraction primitives
tcg: Minor adjustments to deposit expanders
tcg: Add deposit_z expander
tcg/aarch64: Implement field extraction opcodes
tcg/arm: Move isa detection to tcg-target.h
tcg/arm: Implement field extraction opcodes
tcg/i386: Implement field extraction opcodes
tcg/mips: Implement field extraction opcodes
tcg/ppc: Implement field extraction opcodes
tcg/s390: Expose host facilities to tcg-target.h
tcg/s390: Implement field extraction opcodes
tcg/s390: Support deposit into zero
target-alpha: Use deposit and extract ops
target-arm: Use new deposit and extract ops
target-i386: Use new deposit and extract ops
target-mips: Use the new extract op
target-ppc: Use the new deposit and extract ops
target-s390x: Use the new deposit and extract ops
target-alpha/translate.c | 67 ++++---
target-arm/translate-a64.c | 79 +++-----
target-arm/translate.c | 37 +---
target-i386/translate.c | 45 +++--
target-mips/translate.c | 12 +-
target-ppc/translate.c | 35 ++--
target-s390x/translate.c | 34 ++--
tcg/aarch64/tcg-target.h | 4 +
tcg/aarch64/tcg-target.inc.c | 14 ++
tcg/arm/tcg-target.h | 38 +++-
tcg/arm/tcg-target.inc.c | 63 +++---
tcg/i386/tcg-target.h | 10 +
tcg/i386/tcg-target.inc.c | 38 ++++
tcg/ia64/tcg-target.h | 4 +
tcg/mips/tcg-target.h | 2 +
tcg/mips/tcg-target.inc.c | 4 +
tcg/optimize.c | 29 +++
tcg/ppc/tcg-target.h | 4 +
tcg/ppc/tcg-target.inc.c | 10 +
tcg/s390/tcg-target.h | 122 +++++++-----
tcg/s390/tcg-target.inc.c | 113 ++++++-----
tcg/sparc/tcg-target.h | 4 +
tcg/tcg-op.c | 465 ++++++++++++++++++++++++++++++++++++++++++-
tcg/tcg-op.h | 18 ++
tcg/tcg-opc.h | 4 +
tcg/tcg.h | 8 +
tcg/tci/tcg-target.h | 4 +
27 files changed, 954 insertions(+), 313 deletions(-)