Having to support bswap in the guest memory operations at times requires an irritating number of temporaries. Better to allow the bswap operations to be expanded outside of the memory ops and let register allocation do its thing.
This is something that I've been planning to do for some time, to aid i386 and arm32 especially. But I've been prompted again by the nacent risc-v backend, for which this would be especially irritating to have to open-code. Alistair, for convenience I've pushed this to https://github.com/rth7680/qemu.git tcg-next-for-4.0 r~ Richard Henderson (5): tcg: Add TCG_TARGET_HAS_MEMORY_BSWAP tcg/optimize: Optimize bswap tcg/i386: Set TCG_TARGET_HAS_MEMORY_BSWAP with have_movbe tcg/aarch64: Set TCG_TARGET_HAS_MEMORY_BSWAP to false tcg/arm: Set TCG_TARGET_HAS_MEMORY_BSWAP to false tcg/aarch64/tcg-target.h | 1 + tcg/arm/tcg-target.h | 1 + tcg/i386/tcg-target.h | 3 + tcg/mips/tcg-target.h | 1 + tcg/ppc/tcg-target.h | 1 + tcg/s390/tcg-target.h | 1 + tcg/sparc/tcg-target.h | 1 + tcg/tci/tcg-target.h | 2 + tcg/aarch64/tcg-target.inc.c | 63 +++-------- tcg/arm/tcg-target.inc.c | 198 +++++++++-------------------------- tcg/i386/tcg-target.inc.c | 112 +++++++------------- tcg/optimize.c | 12 +++ tcg/tcg-op.c | 118 ++++++++++++++++++++- 13 files changed, 234 insertions(+), 280 deletions(-) -- 2.17.2