mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
On 32-bit x86, disable certain tests involving sNaN values.
Follow-up to commit 495ded2c8c
.
This commit is contained in:
parent
98c48fe5cc
commit
5aa4a1a1fd
@ -1,3 +1,10 @@
|
||||
2013-03-21 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
* sysdeps/generic/math-tests.h: New file.
|
||||
* sysdeps/i386/fpu/math-tests.h: Likewise.
|
||||
* math/test-snan.c: Include it.
|
||||
(TEST_FUNC): Use SNAN_TESTS to short-circuit certain tests.
|
||||
|
||||
2013-03-21 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #15285]
|
||||
|
@ -29,6 +29,9 @@
|
||||
#include <setjmp.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <math-tests.h>
|
||||
|
||||
|
||||
int dest_offset;
|
||||
char *dest_address;
|
||||
double value = 123.456;
|
||||
@ -139,7 +142,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isnan (sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isnan (sNaN)", isnan (sNaN_var)); \
|
||||
check (#FLOAT " isnan (sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? isnan (sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -149,7 +153,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isnan (-sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isnan (-sNaN)", isnan (minus_sNaN_var)); \
|
||||
check (#FLOAT " isnan (-sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? isnan (minus_sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -179,7 +184,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isinf (sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isinf (sNaN)", !isinf (sNaN_var)); \
|
||||
check (#FLOAT " isinf (sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isinf (sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -189,7 +195,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isinf (-sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isinf (-sNaN)", !isinf (minus_sNaN_var)); \
|
||||
check (#FLOAT " isinf (-sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isinf (minus_sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -219,7 +226,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isfinite (sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isfinite (sNaN)", !isfinite (sNaN_var)); \
|
||||
check (#FLOAT " isfinite (sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isfinite (sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -229,7 +237,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isfinite (-sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isfinite (-sNaN)", !isfinite (minus_sNaN_var)); \
|
||||
check (#FLOAT " isfinite (-sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isfinite (minus_sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -259,7 +268,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isnormal (sNaN) isnormal SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isnormal (sNaN)", !isnormal (sNaN_var)); \
|
||||
check (#FLOAT " isnormal (sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isnormal (sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -269,7 +279,8 @@ NAME (void) \
|
||||
printf (#FLOAT " isnormal (-sNaN) raised SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " isnormal (-sNaN)", !isnormal (minus_sNaN_var)); \
|
||||
check (#FLOAT " isnormal (-sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? !isnormal (minus_sNaN_var) : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -299,7 +310,8 @@ NAME (void) \
|
||||
printf (#FLOAT " fpclassify (sNaN) isnormal SIGFPE\n"); \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " fpclassify (sNaN)", fpclassify (sNaN_var) == FP_NAN); \
|
||||
check (#FLOAT " fpclassify (sNaN)", \
|
||||
SNAN_TESTS (FLOAT) ? fpclassify (sNaN_var) == FP_NAN : 1); \
|
||||
} \
|
||||
\
|
||||
feclearexcept(FE_ALL_EXCEPT); \
|
||||
@ -310,7 +322,7 @@ NAME (void) \
|
||||
errors++; \
|
||||
} else { \
|
||||
check (#FLOAT " fpclassify (-sNaN)", \
|
||||
fpclassify (minus_sNaN_var) == FP_NAN); \
|
||||
SNAN_TESTS (FLOAT) ? fpclassify (minus_sNaN_var) == FP_NAN : 1); \
|
||||
} \
|
||||
\
|
||||
fesetenv(&saved_fenv); /* restore saved fenv */ \
|
||||
|
36
sysdeps/generic/math-tests.h
Normal file
36
sysdeps/generic/math-tests.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* Configuration for math tests. Generic version.
|
||||
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Indicate whether to run tests involving sNaN values for the float, double,
|
||||
and long double C data types, respectively. All are run unless
|
||||
overridden. */
|
||||
#ifndef SNAN_TESTS_float
|
||||
# define SNAN_TESTS_float 1
|
||||
#endif
|
||||
#ifndef SNAN_TESTS_double
|
||||
# define SNAN_TESTS_double 1
|
||||
#endif
|
||||
#ifndef SNAN_TESTS_long_double
|
||||
# define SNAN_TESTS_long_double 1
|
||||
#endif
|
||||
|
||||
/* Return nonzero value if to run tests involving sNaN values for X. */
|
||||
#define SNAN_TESTS(x) \
|
||||
(sizeof (x) == sizeof (float) ? SNAN_TESTS_float \
|
||||
: sizeof (x) == sizeof (double) ? SNAN_TESTS_double \
|
||||
: SNAN_TESTS_long_double)
|
26
sysdeps/i386/fpu/math-tests.h
Normal file
26
sysdeps/i386/fpu/math-tests.h
Normal file
@ -0,0 +1,26 @@
|
||||
/* Configuration for math tests. 32-bit x86 version.
|
||||
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* On 32-bit x86, versions of GCC up to at least 4.8 are happy to use FPU load
|
||||
instructions for sNaN values, and loading a float or double sNaN value will
|
||||
already raise an INVALID exception as well as turn the sNaN into a qNaN,
|
||||
rendering certain tests infeasible in this scenario. */
|
||||
#define SNAN_TESTS_float 0
|
||||
#define SNAN_TESTS_double 0
|
||||
|
||||
#include_next <math-tests.h>
|
Loading…
Reference in New Issue
Block a user