Skip to content

Commit

Permalink
Move ROUNDING_TESTS_* out of math-tests.h.
Browse files Browse the repository at this point in the history
Continuing moving macros out of math-tests.h to smaller headers
following typo-proof conventions instead of using #ifndef, this patch
moves the ROUNDING_TESTS_* macros for individual types out to their
own sysdeps header.

In the soft-float case where FE_TONEAREST is the only rounding mode
macro defined, there is no need to define ROUNDING_TESTS_*; it is only
necessary when rounding modes macros are defined that may not be
supported at runtime.  Thus, the ROUNDING_TESTS_* definitions for some
configurations are just removed, not moved to new
math-tests-rounding.h headers; the only architectures needing
math-tests-rounding.h are those where the macros are defined in
bits/fenv.h because of the possibility of a soft-float compilation
using a hard-float glibc with the same ABI (i.e., ARM and RISC-V).

The test-*-vlen*.h headers, by using #undef, do not yet follow
typo-proof conventions (but they no longer implicitly rely on being
included before math-tests.h, and this area can always be cleaned up
further in future).

Tested with build-many-glibcs.py.

	* sysdeps/generic/math-tests-rounding.h: New file.
	* sysdeps/generic/math-tests.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_float): Do not define here.
	(ROUNDING_TESTS_double): Likewise.
	(ROUNDING_TESTS_long_double): Likewise.
	(ROUNDING_TESTS_float128): Likewise.
	* math/test-double-vlen2.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_double): Undefine before defining.
	* math/test-double-vlen4.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_double): Undefine before defining.
	* math/test-double-vlen8.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_double): Undefine before defining.
	* math/test-float-vlen16.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_float): Undefine before defining.
	* math/test-float-vlen4.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_float): Undefine before defining.
	* math/test-float-vlen8.h: Include <math-tests-rounding.h>.
	(ROUNDING_TESTS_float): Undefine before defining.
	* sysdeps/arm/nofpu/math-tests-rounding.h: New file.
	* sysdeps/arm/math-tests.h [__SOFTFP__] (ROUNDING_TESTS_float): Do
	not define here.
	[__SOFTFP__] (ROUNDING_TESTS_double): Likewise.
	[__SOFTFP__] (ROUNDING_TESTS_long_double): Likewise.
	* sysdeps/riscv/nofpu/math-tests-rounding.h: New file.
	* sysdeps/riscv/math-tests.h [!__riscv_flen]
	(ROUNDING_TESTS_float): Do not define here.
	[!__riscv_flen] (ROUNDING_TESTS_double): Likewise.
	[!__risv_flen] (ROUNDING_TESTS_long_double): Likewise.
	* sysdeps/m68k/coldfire/math-tests.h [!__mcffpu__]
	(ROUNDING_TESTS_float): Likewise.
	[!__mcffpu__] (ROUNDING_TESTS_double): Likewise.
	[!__mcffpu__] (ROUNDING_TESTS_long_double): Likewise.
	* sysdeps/mips/math-tests.h [__mips_soft_float]
	(ROUNDING_TESTS_float): Likewise.
	[__mips_soft_float] (ROUNDING_TESTS_double): Likewise.
	[__mips_soft_float] (ROUNDING_TESTS_long_double): Likewise.
	* sysdeps/nios2/math-tests.h (ROUNDING_TESTS_float): Likewise.
	(ROUNDING_TESTS_double): Likewise.
	(ROUNDING_TESTS_long_double): Likewise.
  • Loading branch information
jsm28 committed Aug 22, 2018
1 parent 38b0593 commit 16a2513
Show file tree
Hide file tree
Showing 16 changed files with 141 additions and 35 deletions.
42 changes: 42 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,45 @@
2018-08-22 Joseph Myers <[email protected]>

* sysdeps/generic/math-tests-rounding.h: New file.
* sysdeps/generic/math-tests.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_float): Do not define here.
(ROUNDING_TESTS_double): Likewise.
(ROUNDING_TESTS_long_double): Likewise.
(ROUNDING_TESTS_float128): Likewise.
* math/test-double-vlen2.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_double): Undefine before defining.
* math/test-double-vlen4.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_double): Undefine before defining.
* math/test-double-vlen8.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_double): Undefine before defining.
* math/test-float-vlen16.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_float): Undefine before defining.
* math/test-float-vlen4.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_float): Undefine before defining.
* math/test-float-vlen8.h: Include <math-tests-rounding.h>.
(ROUNDING_TESTS_float): Undefine before defining.
* sysdeps/arm/nofpu/math-tests-rounding.h: New file.
* sysdeps/arm/math-tests.h [__SOFTFP__] (ROUNDING_TESTS_float): Do
not define here.
[__SOFTFP__] (ROUNDING_TESTS_double): Likewise.
[__SOFTFP__] (ROUNDING_TESTS_long_double): Likewise.
* sysdeps/riscv/nofpu/math-tests-rounding.h: New file.
* sysdeps/riscv/math-tests.h [!__riscv_flen]
(ROUNDING_TESTS_float): Do not define here.
[!__riscv_flen] (ROUNDING_TESTS_double): Likewise.
[!__risv_flen] (ROUNDING_TESTS_long_double): Likewise.
* sysdeps/m68k/coldfire/math-tests.h [!__mcffpu__]
(ROUNDING_TESTS_float): Likewise.
[!__mcffpu__] (ROUNDING_TESTS_double): Likewise.
[!__mcffpu__] (ROUNDING_TESTS_long_double): Likewise.
* sysdeps/mips/math-tests.h [__mips_soft_float]
(ROUNDING_TESTS_float): Likewise.
[__mips_soft_float] (ROUNDING_TESTS_double): Likewise.
[__mips_soft_float] (ROUNDING_TESTS_long_double): Likewise.
* sysdeps/nios2/math-tests.h (ROUNDING_TESTS_float): Likewise.
(ROUNDING_TESTS_double): Likewise.
(ROUNDING_TESTS_long_double): Likewise.

2018-08-21 Tobias Klauser <[email protected]>

* sysdeps/unix/sysv/linux/bits/socket.h (PF_MAX): Set to 45.
Expand Down
2 changes: 2 additions & 0 deletions math/test-double-vlen2.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-double.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_double
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen2
Expand Down
2 changes: 2 additions & 0 deletions math/test-double-vlen4.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-double.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_double
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen4
Expand Down
2 changes: 2 additions & 0 deletions math/test-double-vlen8.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-double.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_double
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen8
Expand Down
2 changes: 2 additions & 0 deletions math/test-float-vlen16.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-float.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_float
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen16
Expand Down
2 changes: 2 additions & 0 deletions math/test-float-vlen4.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-float.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_float
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen4
Expand Down
2 changes: 2 additions & 0 deletions math/test-float-vlen8.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include "test-float.h"
#include "test-math-no-inline.h"
#include "test-math-vector.h"
#include <math-tests-rounding.h>

#undef ROUNDING_TESTS_float
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)

#define VEC_SUFF _vlen8
Expand Down
3 changes: 0 additions & 3 deletions sysdeps/arm/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@
support rounding modes, although fesetround succeeds, and do not
support exceptions. */
#ifdef __SOFTFP__
# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
# define EXCEPTION_TESTS_float 0
# define EXCEPTION_TESTS_double 0
# define EXCEPTION_TESTS_long_double 0
Expand Down
29 changes: 29 additions & 0 deletions sysdeps/arm/nofpu/math-tests-rounding.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/* Configuration for math tests: rounding mode support. ARM no-FPU version.
Copyright (C) 2013-2018 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/>. */

#ifndef ARM_NOFPU_MATH_TESTS_ROUNDING_H
#define ARM_NOFPU_MATH_TESTS_ROUNDING_H 1

/* On systems with VFP support, but where glibc is built for
soft-float, the libgcc functions used in libc and libm do not
support rounding modes, although fesetround succeeds. */
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)

#endif /* math-tests-rounding.h. */
30 changes: 30 additions & 0 deletions sysdeps/generic/math-tests-rounding.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/* Configuration for math tests: rounding mode support. Generic version.
Copyright (C) 2013-2018 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/>. */

#ifndef _MATH_TESTS_ROUNDING_H
#define _MATH_TESTS_ROUNDING_H 1

/* Indicate whether to run tests involving a given rounding mode for a
given floating-point type, given that fesetround succeeds for that
mode. All are run if fesetround succeeds unless overridden. */
#define ROUNDING_TESTS_float(MODE) 1
#define ROUNDING_TESTS_double(MODE) 1
#define ROUNDING_TESTS_long_double(MODE) 1
#define ROUNDING_TESTS_float128(MODE) 1

#endif /* math-tests-rounding.h. */
17 changes: 1 addition & 16 deletions sysdeps/generic/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,6 @@
/* Return nonzero value if to run tests involving sNaN values for X. */
#define SNAN_TESTS(x) MATH_TESTS_TG (SNAN_TESTS_, , x)

/* Indicate whether to run tests involving a given rounding mode for a
given floating-point type, given that fesetround succeeds for that
mode. All are run if fesetround succeeds unless overridden. */
#ifndef ROUNDING_TESTS_float
# define ROUNDING_TESTS_float(MODE) 1
#endif
#ifndef ROUNDING_TESTS_double
# define ROUNDING_TESTS_double(MODE) 1
#endif
#ifndef ROUNDING_TESTS_long_double
# define ROUNDING_TESTS_long_double(MODE) 1
#endif
#ifndef ROUNDING_TESTS_float128
# define ROUNDING_TESTS_float128(MODE) 1
#endif

#define ROUNDING_TESTS(TYPE, MODE) \
MATH_TESTS_TG (ROUNDING_TESTS_, (MODE), TYPE)

Expand Down Expand Up @@ -93,6 +77,7 @@
# define EXCEPTION_SET_FORCES_TRAP 0
#endif

#include <math-tests-rounding.h>
#include <math-tests-snan.h>
#include <math-tests-snan-cast.h>
#include <math-tests-snan-payload.h>
3 changes: 0 additions & 3 deletions sysdeps/m68k/coldfire/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@

/* ColdFire soft float does not support exceptions and rounding modes. */
#ifndef __mcffpu__
# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
# define EXCEPTION_TESTS_float 0
# define EXCEPTION_TESTS_double 0
# define EXCEPTION_TESTS_long_double 0
Expand Down
3 changes: 0 additions & 3 deletions sysdeps/mips/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@

/* MIPS soft float does not support exceptions and rounding modes. */
#ifdef __mips_soft_float
# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
# define EXCEPTION_TESTS_float 0
# define EXCEPTION_TESTS_double 0
# define EXCEPTION_TESTS_long_double 0
Expand Down
3 changes: 0 additions & 3 deletions sysdeps/nios2/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@

/* Current Nios II soft-float does not support exceptions or rounding
modes. */
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
#define EXCEPTION_TESTS_float 0
#define EXCEPTION_TESTS_double 0
#define EXCEPTION_TESTS_long_double 0
Expand Down
7 changes: 0 additions & 7 deletions sysdeps/riscv/math-tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,4 @@
# define EXCEPTION_TESTS_long_double 0
#endif

/* On soft-float targets we only support the "to nearest" rounding mode. */
#ifndef __riscv_flen
# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
#endif

#include_next <math-tests.h>
27 changes: 27 additions & 0 deletions sysdeps/riscv/nofpu/math-tests-rounding.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* Configuration for math tests: rounding mode support. RISC-V no-FPU version.
Copyright (C) 2014-2018 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/>. */

#ifndef RISCV_NOFPU_MATH_TESTS_ROUNDING_H
#define RISCV_NOFPU_MATH_TESTS_ROUNDING_H 1

/* On soft-float targets we only support the "to nearest" rounding mode. */
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)

#endif /* math-tests-rounding.h. */

0 comments on commit 16a2513

Please sign in to comment.