qemu-e2k/target
Joseph Myers c6a56c8e99 target/i386: fix pmovsx/pmovzx in-place operations
The SSE4.1 pmovsx* and pmovzx* instructions take packed 1-byte, 2-byte
or 4-byte inputs and sign-extend or zero-extend them to a wider vector
output.  The associated helpers for these instructions do the
extension on each element in turn, starting with the lowest.  If the
input and output are the same register, this means that all the input
elements after the first have been overwritten before they are read.
This patch makes the helpers extend starting with the highest element,
not the lowest, to avoid such overwriting.  This fixes many GCC test
failures (161 in the gcc testsuite in my GCC 6-based testing) when
testing with a default CPU setting enabling those instructions.

Signed-off-by: Joseph Myers <joseph@codesourcery.com>

Message-Id: <alpine.DEB.2.20.1708082018390.23380@digraph.polyomino.org.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-19 14:09:10 +02:00
..
alpha target/alpha: Switch to do_transaction_failed() hook 2017-09-07 11:15:55 -07:00
arm target/arm: Avoid an extra temporary for store_exclusive 2017-09-14 18:43:18 +01:00
cris target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
hppa target/hppa: Convert to TranslatorOps 2017-09-07 11:23:13 -07:00
i386 target/i386: fix pmovsx/pmovzx in-place operations 2017-09-19 14:09:10 +02:00
lm32 target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
m68k target/m68k: Switch fpu_rom from make_floatx80() to make_floatx80_init() 2017-09-10 18:07:40 +02:00
microblaze target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
mips target/mips: Fix RDHWR CC with icount 2017-08-02 22:18:13 +01:00
moxie moxie: replace cpu_moxie_init() with cpu_generic_init() 2017-09-01 11:54:25 -03:00
nios2 target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
openrisc target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
ppc ppc/kvm: use kvm_vm_check_extension() in kvmppc_is_pr() 2017-09-15 10:29:48 +10:00
s390x target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
sh4 sh4: replace cpu_sh4_init() with cpu_generic_init() 2017-09-01 11:54:24 -03:00
sparc sparc: Fix typedef clash 2017-09-14 15:00:41 +01:00
tilegx tilegx: replace cpu_tilegx_init() with cpu_generic_init() 2017-09-01 11:54:24 -03:00
tricore tricore: replace cpu_tricore_init() with cpu_generic_init() 2017-09-01 11:54:24 -03:00
unicore32 target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00
xtensa target: [tcg] Use a generic enum for DISAS_ values 2017-09-06 08:06:47 -07:00