about summary refs log tree commit diff
path: root/math/Makefile
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2016-05-26 16:38:04 +0000
committerJoseph Myers <joseph@codesourcery.com>2016-05-26 16:38:04 +0000
commit262112840ca3807d2e5c7227a476be88be5740a7 (patch)
tree819898673e9c173d0f0d81dd6e180c9684451e70 /math/Makefile
parent2f0dc39029ae08cbed2f65d21501b3e329895e7d (diff)
downloadglibc-262112840ca3807d2e5c7227a476be88be5740a7.tar.gz
glibc-262112840ca3807d2e5c7227a476be88be5740a7.tar.xz
glibc-262112840ca3807d2e5c7227a476be88be5740a7.zip
Support sNaN testing in libm-test.inc.
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
<https://sourceware.org/ml/libc-ports/2013-04/msg00008.html>, to allow
more tests to be added, and issues exposed fixed, bit by bit.

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.
Diffstat (limited to 'math/Makefile')
-rw-r--r--math/Makefile9
1 files changed, 8 insertions, 1 deletions
diff --git a/math/Makefile b/math/Makefile
index 57c3ec15aa..f0265bb640 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -187,7 +187,14 @@ CFLAGS-test-float-vlen8-wrappers.c = $(float-vlen8-arch-ext-cflags)
 CFLAGS-test-float-vlen16.c = $(libm-test-vec-cflags)
 CFLAGS-test-float-vlen16-wrappers.c = $(float-vlen16-arch-ext-cflags)
 
-libm-test-no-inline-cflags = -fno-inline -ffloat-store -fno-builtin
+# The no-inline tests use -fsignaling-nans, and thereby use the
+# versions of classification macros that support sNaNs.  The inline
+# function tests use the versions of classification macros that may
+# raise spurious exceptions for sNaNs, but also do not test for
+# exceptions.  Thus both versions of the classification macros are
+# validated.
+libm-test-no-inline-cflags = -fno-inline -ffloat-store -fno-builtin \
+			     -fsignaling-nans
 libm-test-finite-cflags = $(libm-test-no-inline-cflags) \
 			  -U__FINITE_MATH_ONLY__ -D__FINITE_MATH_ONLY__=1
 CFLAGS-test-float.c = $(libm-test-no-inline-cflags)