qemu-patch-raspberry4/tests/tcg/i386
Joseph Myers 975af797f1 target/i386: fix IEEE x87 floating-point exception raising
Most x87 instruction implementations fail to raise the expected IEEE
floating-point exceptions because they do nothing to convert the
exception state from the softfloat machinery into the exception flags
in the x87 status word.  There is special-case handling of division to
raise the divide-by-zero exception, but that handling is itself buggy:
it raises the exception in inappropriate cases (inf / 0 and nan / 0,
which should not raise any exceptions, and 0 / 0, which should raise
"invalid" instead).

Fix this by converting the floating-point exceptions raised during an
operation by the softfloat machinery into exceptions in the x87 status
word (passing through the existing fpu_set_exception function for
handling related to trapping exceptions).  There are special cases
where some functions convert to integer internally but exceptions from
that conversion are not always correct exceptions for the instruction
to raise.

There might be scope for some simplification if the softfloat
exception state either could always be assumed to be in sync with the
state in the status word, or could always be ignored at the start of
each instruction and just set to 0 then; I haven't looked into that in
detail, and it might run into interactions with the various ways the
emulation does not yet handle trapping exceptions properly.  I think
the approach taken here, of saving the softfloat state, setting
exceptions there to 0 and then merging the old exceptions back in
after carrying out the operation, is conservatively safe.

Signed-off-by: Joseph Myers <joseph@codesourcery.com>
Message-Id: <alpine.DEB.2.21.2005152120280.3469@digraph.polyomino.org.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-06-10 12:10:51 -04:00
..
system tests/tcg/multiarch: move the system memory test 2019-05-28 10:28:51 +01:00
hello-i386.c avoid TABs in files that only contain a few 2019-01-11 15:46:56 +01:00
Makefile.softmmu-target tests/tcg: cleanup Makefile inclusions 2019-09-10 09:38:33 +01:00
Makefile.target tests/tcg: drop test-i386-fprem from TESTS when not SLOW 2019-10-28 15:12:38 +00:00
README tests/tcg: remove runcom test 2018-07-24 11:45:25 +01:00
test-i386-code16.S tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01:00
test-i386-fbstp.c target/i386: fix fbstp handling of out-of-range values 2020-06-10 12:10:25 -04:00
test-i386-fisttp.c target/i386: fix fisttpl, fisttpll handling of out-of-range values 2020-06-10 12:10:26 -04:00
test-i386-fldcst.c target/i386: fix floating-point load-constant rounding 2020-06-10 12:10:24 -04:00
test-i386-fp-exceptions.c target/i386: fix IEEE x87 floating-point exception raising 2020-06-10 12:10:51 -04:00
test-i386-fprem.c tests/tcg/i386: add runner for test-i386-fprem 2018-06-20 20:22:34 +01:00
test-i386-fscale.c target/i386: fix fscale handling of rounding precision 2020-06-10 12:10:21 -04:00
test-i386-fxam.c target/i386: fix fxam handling of invalid encodings 2020-06-10 12:10:24 -04:00
test-i386-fxtract.c target/i386: implement special cases for fxtract 2020-06-10 12:10:16 -04:00
test-i386-muldiv.h tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01:00
test-i386-pseudo-denormal.c softfloat: fix floatx80 pseudo-denormal round to integer 2020-05-15 11:04:50 -07:00
test-i386-shift.h tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01:00
test-i386-snan-convert.c softfloat: silence sNaN for conversions to/from floatx80 2020-05-15 11:04:50 -07:00
test-i386-ssse3.c tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01:00
test-i386-vm86.S tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01:00
test-i386.c Fixes i386 xchgq test 2018-12-11 18:41:25 +01:00
test-i386.h tests/tcg: move i386 specific tests into subdir 2018-06-20 20:22:34 +01: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.

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
----------