qemu-e2k/tests/tcg/i386
Paolo Bonzini 60c7dd22e1 target/i386: fix ADOX followed by ADCX
When ADCX is followed by ADOX or vice versa, the second instruction's
carry comes from EFLAGS and the condition codes use the CC_OP_ADCOX
operation.  Retrieving the carry from EFLAGS is handled by this bit
of gen_ADCOX:

        tcg_gen_extract_tl(carry_in, cpu_cc_src,
            ctz32(cc_op == CC_OP_ADCX ? CC_C : CC_O), 1);

Unfortunately, in this case cc_op has been overwritten by the previous
"if" statement to CC_OP_ADCOX.  This works by chance when the first
instruction is ADCX; however, if the first instruction is ADOX,
ADCX will incorrectly take its carry from OF instead of CF.

Fix by moving the computation of the new cc_op at the end of the function.
The included exhaustive test case fails without this patch and passes
afterwards.

Because ADCX/ADOX need not be invoked through the VEX prefix, this
regression bisects to commit 16fc5726a6 ("target/i386: reimplement
0x0f 0x38, add AVX", 2022-10-18).  However, the mistake happened a
little earlier, when BMI instructions were rewritten using the new
decoder framework.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1471
Reported-by: Paul Jolly <https://gitlab.com/myitcv>
Fixes: 1d0b926150 ("target/i386: move scalar 0F 38 and 0F 3A instruction to new decoder", 2022-10-18)
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-11 09:07:25 +01:00
..
system tests/tcg/i386: expand .data sections for system tests 2021-04-06 15:04:42 +01:00
float_convd.conf tests/tcg: add float_convd test 2022-04-20 16:04:20 +01:00
float_convs.ref tests/tcg: add missing reference files for float_convs 2022-04-20 16:04:20 +01:00
hello-i386.c
Makefile.softmmu-target tests/tcg: clean up calls to run-test 2022-10-06 11:53:40 +01:00
Makefile.target target/i386: fix ADOX followed by ADCX 2023-02-11 09:07:25 +01:00
README tests/tcg: i386: add SSE tests 2022-09-01 20:16:33 +02:00
test-3dnow.c tests/tcg: i386: add MMX and 3DNow! tests 2022-09-19 15:14:40 +02:00
test-avx.c target/i386: implement F16C instructions 2022-10-20 15:16:18 +02:00
test-avx.py target/i386: implement FMA instructions 2022-10-22 09:05:54 +02:00
test-i386-adcox.c target/i386: fix ADOX followed by ADCX 2023-02-11 09:07:25 +01:00
test-i386-bmi2.c target/i386: Fix BEXTR instruction 2023-02-11 09:07:25 +01:00
test-i386-code16.S
test-i386-f2xm1.c
test-i386-fbstp.c
test-i386-fisttp.c
test-i386-fldcst.c
test-i386-fp-exceptions.c tests/tcg/i386: Use explicit suffix on fist insns 2022-06-14 00:15:04 +01:00
test-i386-fpatan.c
test-i386-fprem.c
test-i386-fscale.c
test-i386-fxam.c
test-i386-fxtract.c
test-i386-fyl2x.c
test-i386-fyl2xp1.c
test-i386-muldiv.h
test-i386-pcmpistri.c
test-i386-pseudo-denormal.c
test-i386-shift.h
test-i386-snan-convert.c
test-i386-sse-exceptions.c
test-i386-ssse3.c
test-i386-vm86.S
test-i386.c tests/tcg: remove old SSE tests 2022-09-19 15:15:59 +02:00
test-i386.h
test-mmx.c tests/tcg: i386: add MMX and 3DNow! tests 2022-09-19 15:14:40 +02:00
test-mmx.py tests/tcg: i386: add MMX and 3DNow! tests 2022-09-19 15:14:40 +02:00
x86.csv tests/tcg: i386: fix typos in 3DNow! instructions 2022-09-18 09:17:41 +02:00

These are i386 specific guest programs

test-i386
---------

This program executes most of the 16 bit and 32 bit x86 instructions and
generates a text output, for comparison with the output obtained with
a real CPU or another emulator.

The Linux system call modify_ldt() is used to create x86 selectors
to test some 16 bit addressing and 32 bit with segmentation cases.

The Linux system call vm86() is used to test vm86 emulation.

Various exceptions are raised to test most of the x86 user space
exception reporting.

test-avx
--------

This program executes most SSE/AVX instructions and generates a text output,
for comparison with the output obtained with a real CPU or another emulator.

test-avx.h is generate from x86.csv by test-avx.py
x86.csv comes from https://github.com/quasilyte/avx512test

linux-test
----------

This program tests various Linux system calls. It is used to verify
that the system call parameters are correctly converted between target
and host CPUs.

test-i386-fprem
---------------

test-mmap
---------

sha1
----

hello-i386
----------