This patch adds support in libm-test.inc for tests with signaling NaN arguments. gen-libm-test.pl is made to set a flag TEST_SNAN for such tests, so that they can be disabled automatically when sNaN testing isn't supported for a given type (at present, for float and double on 32-bit x86 because it's unpredictable when a value might be loaded into a floating-point register and so automatically converted to long double with sNaNs converted to quiet NaNs). -fsignaling-nans is used where needed.
Tests are added for classification macros, as a starting point; this is deliberately more conservative than Thomas's patch
Tested for x86_64 and x86.
- math/libm-test.inc: Update comment about NaN testing. (TEST_SNAN): New macro. (snan_value): Likewise. (enable_test): Disable tests of sNaNs when SNAN_TESTS fails. (fpclassify_test_data): Add sNaN tests. (isfinite_test_data): Likewise. (isinf_test_data): Likewise. (isnan_test_data): Likewise. (isnormal_test_data): Likewise. (issignaling_test_data): Likewise. (signbit_test_data): Likewise.
- math/gen-libm-test.pl (%beautify): Add snan_value. (show_exceptions): Add argument $test_snan. (parse_args): Handle snan_value as non-finite. Update call to show_exceptions.
- math/Makefile (libm-test-no-inline-cflags): Add
-fsignaling-nans.
2621128 Support sNaN testing in libm-test.inc.
ChangeLog | 20 ++++++++++++++++++++
math/Makefile | 9 ++++++++-
math/gen-libm-test.pl | 14 +++++++++-----
math/libm-test.inc | 21 +++++++++++++++++++--
4 files changed, 56 insertions(+), 8 deletions(-)
Upstream: sourceware.org