qemu-patch-raspberry4/tests/tcg/i386
Joseph Myers eca30647fc target/i386: reimplement f2xm1 using floatx80 operations
The x87 f2xm1 emulation is currently based around conversion to
double.  This is inherently unsuitable for a good emulation of any
floatx80 operation, even before considering that it is a particularly
naive implementation using double (computing with pow and then
subtracting 1 rather than attempting a better emulation using expm1).

Reimplement using the soft-float operations, including additions and
multiplications with higher precision where appropriate to limit
accumulation of errors.  I considered reusing some of the m68k code
for transcendental operations, but the instructions don't generally
correspond exactly to x87 operations (for example, m68k has 2^x and
e^x - 1, but not 2^x - 1); to avoid possible accumulation of errors
from applying multiple such operations each rounding to floatx80
precision, I wrote a direct implementation of 2^x - 1 instead.  It
would be possible in principle to make the implementation more
efficient by doing the intermediate operations directly with
significands, signs and exponents and not packing / unpacking floatx80
format for each operation, but that would make it significantly more
complicated and it's not clear that's worthwhile; the m68k emulation
doesn't try to do that.

A test is included with many randomly generated inputs.  The
assumption of the test is that the result in round-to-nearest mode
should always be one of the two closest floating-point numbers to the
mathematical value of 2^x - 1; the implementation aims to do somewhat
better than that (about 70 correct bits before rounding).  I haven't
investigated how accurate hardware is.

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

Message-Id: <alpine.DEB.2.21.2006112341010.18393@digraph.polyomino.org.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-06-26 09:39:37 -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: ensure -cpu max also used for plugin run 2020-06-16 14:49:05 +01: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-f2xm1.c target/i386: reimplement f2xm1 using floatx80 operations 2020-06-26 09:39:37 -04: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-pcmpistri.c target/i386: correct fix for pcmpxstrx substring search 2020-06-12 11:10:39 -04: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
----------