floating point emulation can fail to set FE_UNDERFLOW

Bug #1841491 reported by Paul Clarke
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

Floating point emulation can fail to set FE_UNDERFLOW in some circumstances. This shows up often in glibc's "math" tests. A similar test is attached.

This is similar to bug #1841442, but not the same problem, and I don't think the fix will be in the same code.

On ppc64le native:
--
$ gcc -c -O2 fma.c
$ gcc -O2 test-fma.c fma.o -lm -o test-fma
$ ./test-fma $(./test-fma)
fma(0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x0.0000000000001p-1022)
0x0

0xa000000
FE_INEXACT FE_UNDERFLOW
0x1p-1022
--

On qemu-system-ppc64:
--
$ ./test-fma $(./test-fma)
fma(0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x0.0000000000001p-1022)
0x0

0x2000000
FE_INEXACT
0x1p-1022
--

QEMU versions vary, but not too much, and are pretty close to git HEAD:
- 586f3dced9 (HEAD -> master, origin/master, origin/HEAD) Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20190822' into staging
- 864ab31 Update version for v4.1.0-rc4 release

There are worse symptoms on qemu-x86_64, but this is apparently not surprising per https://bugs.launchpad.net/qemu/+bug/1841442/comments/6.

Revision history for this message
Paul Clarke (7-pc) wrote :
Revision history for this message
Paul Clarke (7-pc) wrote :
Revision history for this message
Paul Clarke (7-pc) wrote :

Responding to the patch https://lists.nongnu.org/archive/html/qemu-ppc/2019-08/msg00404.html, it seems to work for "double", but not for "float". Test case attached.

Revision history for this message
Paul Clarke (7-pc) wrote :
Revision history for this message
Richard Henderson (rth) wrote :

The float test failure is part of a larger problem for target/powerpc in which all float routines are implemented incorrectly. They are all implemented as double operations with rounding to float as a second step. Which not only produces incorrect exceptions, as in this case, but incorrect numerical results from the double rounding.

This should probably be split to a separate bug...

Changed in qemu:
status: New → Confirmed
Revision history for this message
Thomas Huth (th-huth) wrote :

A patch for this bug has been merged here:
https://git.qemu.org/?p=qemu.git;a=commitdiff;h=cbc65a8f22b29680f3
... can we close this ticket now or is there more to do?

Revision history for this message
Paul Clarke (7-pc) wrote :

Comment #5 suggested splitting the "float" issue to a separate bug, which was done some time ago (bug #1841592).

I think this ticket can be closed.

Revision history for this message
Thomas Huth (th-huth) wrote :

Ok, thanks for the pointer to the other bug! So I'm closing this one now.

Changed in qemu:
status: Confirmed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.