SPARC: fix nearbyint on sNaN input
authorAurelien Jarno <aurelien@aurel32.net>
Thu, 30 Jun 2016 19:18:34 +0000 (21:18 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Fri, 1 Jul 2016 14:36:41 +0000 (16:36 +0200)
commit2cbec365663cd0e2fe21f77b1f5e20ae3ab5f538
treeed30c465de1490ec346b8ed458430d6b223f44aa
parentf43cb35c9b3c35addc6dc0f1427caf51786ca1d2
SPARC: fix nearbyint on sNaN input

nearbyint and nearbyintf should not trigger inexact exceptions, but
should still trigger an invalid exception for a sNaN input.

The SPARC specific implementations of these functions save the FSR at
the beginning of the function and restore it at the end to not trigger
an inexact exception. This however doesn't work for an sNaN input which
need to trigger an invalid exception. Fix that by adding a fcmp
instruction using the input value before saving FSR, so that an invalid
exception is triggered for a sNaN input.

This fixes the math/test-nearbyint-except test on SPARC.

Changelog:
* sparc/sparc32/sparcv9/fpu/s_nearbyint.S (__nearbyint): Trigger an
invalid exception for a sNaN input.
* sparc/sparc32/sparcv9/fpu/s_nearbyintf.S (__nearbyintf): Likewise.
* sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S
(__nearbyint_vis3): Likewise
* sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S
(__nearbyintf_vis3): Likewise
* sparc/sparc64/fpu/s_nearbyint.S (__nearbyint): Likewise.
* sparc/sparc64/fpu/s_nearbyintf.S (__nearbyintf): Likewise.
* sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S (__nearbyint_vis3):
Likewise.
* sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S (__nearbyintf_vis3):
Likewise.
ChangeLog
sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S
sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S
sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S
sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S
sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S
sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S
sysdeps/sparc/sparc64/fpu/s_nearbyint.S
sysdeps/sparc/sparc64/fpu/s_nearbyintf.S