This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 1/4] Remove math-finite.h
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: Wilco Dijkstra <Wilco dot Dijkstra at arm dot com>, "libc-alpha at sourceware dot org" <libc-alpha at sourceware dot org>
- Cc: nd <nd at arm dot com>
- Date: Tue, 16 Jul 2019 15:19:36 -0300
- Subject: Re: [PATCH 1/4] Remove math-finite.h
- References: <VI1PR0801MB212753501D9DA1AA00BC7BA583E20@VI1PR0801MB2127.eurprd08.prod.outlook.com>
On 26/06/2019 10:57, Wilco Dijkstra wrote:
> Remove math-finite.h redirections for math functions.
>
> Passes buildmanyglibc.
>
> 2019-06-26 Wilco Dijkstra <wdijkstr@arm.com>
>
> * bits/math-finite.h: Delete file.
> * math/Makefile: Remove math-finite.h from installed headers.
> * math/math.h: Remove math-finite.h inclusions.
> * sysdeps/ia64/fpu/bits/math-finite.h: Delete file.
I think the reasons laid out on original proposal [1] are reasonable.
The math-finite.h is the optimization that sounded like a brilliant idea
but ended up as just extra complexity when proper optimization were applied
for the original intent.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
[1] https://sourceware.org/ml/libc-alpha/2019-03/msg00395.html
>
> --
> diff --git a/bits/math-finite.h b/bits/math-finite.h
> deleted file mode 100644
> index 6141c1253724d022193fdd430b3ff0dab4730346..0000000000000000000000000000000000000000
> --- a/bits/math-finite.h
> +++ /dev/null
> @@ -1,197 +0,0 @@
> -/* Entry points to finite-math-only compiler runs.
> - Copyright (C) 2011-2019 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_H
> -# error "Never use <bits/math-finite.h> directly; include <math.h> instead."
> -#endif
> -
> -#define __REDIRFROM(...) __REDIRFROM_X(__VA_ARGS__)
> -
> -#define __REDIRTO(...) __REDIRTO_X(__VA_ARGS__)
> -
> -#define __MATH_REDIRCALL_X(from, args, to) \
> - extern _Mdouble_ __REDIRECT_NTH (from, args, to)
> -#define __MATH_REDIRCALL(function, reentrant, args) \
> - __MATH_REDIRCALL_X \
> - (__REDIRFROM (function, reentrant), args, \
> - __REDIRTO (function, reentrant))
> -#define __MATH_REDIRCALL_2(from, reentrant, args, to) \
> - __MATH_REDIRCALL_X \
> - (__REDIRFROM (from, reentrant), args, \
> - __REDIRTO (to, reentrant))
> -
> -#define __MATH_REDIRCALL_INTERNAL(function, reentrant, args) \
> - __MATH_REDIRCALL_X \
> - (__REDIRFROM (__CONCAT (__, function), \
> - __CONCAT (reentrant, _finite)), \
> - args, __REDIRTO (function, _r))
> -
> -
> -/* acos. */
> -__MATH_REDIRCALL (acos, , (_Mdouble_));
> -
> -#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
> -/* acosh. */
> -__MATH_REDIRCALL (acosh, , (_Mdouble_));
> -#endif
> -
> -/* asin. */
> -__MATH_REDIRCALL (asin, , (_Mdouble_));
> -
> -/* atan2. */
> -__MATH_REDIRCALL (atan2, , (_Mdouble_, _Mdouble_));
> -
> -#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
> -/* atanh. */
> -__MATH_REDIRCALL (atanh, , (_Mdouble_));
> -#endif
> -
> -/* cosh. */
> -__MATH_REDIRCALL (cosh, , (_Mdouble_));
> -
> -/* exp. */
> -__MATH_REDIRCALL (exp, , (_Mdouble_));
> -
> -#if __GLIBC_USE (IEC_60559_FUNCS_EXT)
> -/* exp10. */
> -__MATH_REDIRCALL (exp10, , (_Mdouble_));
> -#endif
> -
> -#ifdef __USE_ISOC99
> -/* exp2. */
> -__MATH_REDIRCALL (exp2, , (_Mdouble_));
> -#endif
> -
> -/* fmod. */
> -__MATH_REDIRCALL (fmod, , (_Mdouble_, _Mdouble_));
> -
> -#if defined __USE_XOPEN || defined __USE_ISOC99
> -/* hypot. */
> -__MATH_REDIRCALL (hypot, , (_Mdouble_, _Mdouble_));
> -#endif
> -
> -#if (__MATH_DECLARING_DOUBLE && (defined __USE_MISC || defined __USE_XOPEN)) \
> - || (!__MATH_DECLARING_DOUBLE && defined __USE_MISC)
> -/* j0. */
> -__MATH_REDIRCALL (j0, , (_Mdouble_));
> -
> -/* y0. */
> -__MATH_REDIRCALL (y0, , (_Mdouble_));
> -
> -/* j1. */
> -__MATH_REDIRCALL (j1, , (_Mdouble_));
> -
> -/* y1. */
> -__MATH_REDIRCALL (y1, , (_Mdouble_));
> -
> -/* jn. */
> -__MATH_REDIRCALL (jn, , (int, _Mdouble_));
> -
> -/* yn. */
> -__MATH_REDIRCALL (yn, , (int, _Mdouble_));
> -#endif
> -
> -#ifdef __USE_MISC
> -/* lgamma_r. */
> -__MATH_REDIRCALL (lgamma, _r, (_Mdouble_, int *));
> -#endif
> -
> -/* Redirect __lgammal_r_finite to __lgamma_r_finite when __NO_LONG_DOUBLE_MATH
> - is set and to itself otherwise. It also redirects __lgamma_r_finite and
> - __lgammaf_r_finite to themselves. */
> -__MATH_REDIRCALL_INTERNAL (lgamma, _r, (_Mdouble_, int *));
> -
> -#if ((defined __USE_XOPEN || defined __USE_ISOC99) \
> - && defined __extern_always_inline)
> -/* lgamma. */
> -__extern_always_inline _Mdouble_
> -__NTH (__REDIRFROM (lgamma, ) (_Mdouble_ __d))
> -{
> -# if defined __USE_MISC || defined __USE_XOPEN
> - return __REDIRTO (lgamma, _r) (__d, &signgam);
> -# else
> - int __local_signgam = 0;
> - return __REDIRTO (lgamma, _r) (__d, &__local_signgam);
> -# endif
> -}
> -#endif
> -
> -#if ((defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)) \
> - && defined __extern_always_inline) && !__MATH_DECLARING_FLOATN
> -/* gamma. */
> -__extern_always_inline _Mdouble_
> -__NTH (__REDIRFROM (gamma, ) (_Mdouble_ __d))
> -{
> - return __REDIRTO (lgamma, _r) (__d, &signgam);
> -}
> -#endif
> -
> -/* log. */
> -__MATH_REDIRCALL (log, , (_Mdouble_));
> -
> -/* log10. */
> -__MATH_REDIRCALL (log10, , (_Mdouble_));
> -
> -#ifdef __USE_ISOC99
> -/* log2. */
> -__MATH_REDIRCALL (log2, , (_Mdouble_));
> -#endif
> -
> -/* pow. */
> -__MATH_REDIRCALL (pow, , (_Mdouble_, _Mdouble_));
> -
> -#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
> -/* remainder. */
> -__MATH_REDIRCALL (remainder, , (_Mdouble_, _Mdouble_));
> -#endif
> -
> -#if ((__MATH_DECLARING_DOUBLE \
> - && (defined __USE_MISC \
> - || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))) \
> - || (!defined __MATH_DECLARE_LDOUBLE && defined __USE_MISC)) \
> - && !__MATH_DECLARING_FLOATN
> -/* scalb. */
> -__MATH_REDIRCALL (scalb, , (_Mdouble_, _Mdouble_));
> -#endif
> -
> -/* sinh. */
> -__MATH_REDIRCALL (sinh, , (_Mdouble_));
> -
> -/* sqrt. */
> -__MATH_REDIRCALL (sqrt, , (_Mdouble_));
> -
> -#if defined __USE_ISOC99 && defined __extern_always_inline
> -/* tgamma. */
> -extern _Mdouble_
> -__REDIRFROM (__gamma, _r_finite) (_Mdouble_, int *);
> -
> -__extern_always_inline _Mdouble_
> -__NTH (__REDIRFROM (tgamma, ) (_Mdouble_ __d))
> -{
> - int __local_signgam = 0;
> - _Mdouble_ __res = __REDIRTO (gamma, _r) (__d, &__local_signgam);
> - return __local_signgam < 0 ? -__res : __res;
> -}
> -#endif
> -
> -#undef __REDIRFROM
> -#undef __REDIRTO
> -#undef __MATH_REDIRCALL
> -#undef __MATH_REDIRCALL_2
> -#undef __MATH_REDIRCALL_INTERNAL
> -#undef __MATH_REDIRCALL_X
> diff --git a/math/Makefile b/math/Makefile
> index cb4eaec6a9d54d3cb08a3ff86ea9fd15c41cf127..8d754ed02c4e60dc9becc63e2b604e8c0d6557f7 100644
> --- a/math/Makefile
> +++ b/math/Makefile
> @@ -25,8 +25,7 @@ include ../Makeconfig
> headers := math.h bits/mathcalls.h bits/mathinline.h \
> fpu_control.h complex.h bits/cmathcalls.h fenv.h \
> bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
> - bits/math-finite.h bits/math-vector.h \
> - finclude/math-vector-fortran.h \
> + bits/math-vector.h finclude/math-vector-fortran.h \
> bits/libm-simd-decl-stubs.h bits/iscanonical.h \
> bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \
> bits/long-double.h bits/mathcalls-helper-functions.h \
> diff --git a/math/math.h b/math/math.h
> index d70ec3877cc125b0241b7f63edafe4f6000c5f5c..ab2bef2ff75cd6fee9abd09135e52f9504d09364 100644
> --- a/math/math.h
> +++ b/math/math.h
> @@ -1245,226 +1245,6 @@ iszero (__T __val)
> # include <bits/mathinline.h>
> #endif
>
> -/* Define special entry points to use when the compiler got told to
> - only expect finite results. */
> -#if defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0
> -
> -/* Include bits/math-finite.h for double. */
> -# define _Mdouble_ double
> -# define __MATH_DECLARING_DOUBLE 1
> -# define __MATH_DECLARING_FLOATN 0
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## reentrant
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## reentrant ## _finite
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -
> -/* When __USE_ISOC99 is defined, include math-finite for float and
> - long double, as well. */
> -# ifdef __USE_ISOC99
> -
> -/* Include bits/math-finite.h for float. */
> -# define _Mdouble_ float
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 0
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f ## reentrant
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f ## reentrant ## _finite
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -
> -/* Include bits/math-finite.h for long double. */
> -# ifdef __MATH_DECLARE_LDOUBLE
> -# define _Mdouble_ long double
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 0
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## l ## reentrant
> -# ifdef __NO_LONG_DOUBLE_MATH
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## l ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# endif /* __USE_ISOC99. */
> -
> -/* Include bits/math-finite.h for _FloatN and _FloatNx. */
> -
> -# if (__HAVE_DISTINCT_FLOAT16 || (__HAVE_FLOAT16 && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float16
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f16 ## reentrant
> -# if __HAVE_DISTINCT_FLOAT16
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f16 ## reentrant ## _finite
> -# else
> -# error "non-disinct _Float16"
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT32 || (__HAVE_FLOAT32 && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float32
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f32 ## reentrant
> -# if __HAVE_DISTINCT_FLOAT32
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f32 ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT64 || (__HAVE_FLOAT64 && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float64
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f64 ## reentrant
> -# if __HAVE_DISTINCT_FLOAT64
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f64 ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT128 || (__HAVE_FLOAT128 && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float128
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f128 ## reentrant
> -# if __HAVE_DISTINCT_FLOAT128
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f128 ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## l ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT32X || (__HAVE_FLOAT32X && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float32x
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f32x ## reentrant
> -# if __HAVE_DISTINCT_FLOAT32X
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f32x ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT64X || (__HAVE_FLOAT64X && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float64x
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f64x ## reentrant
> -# if __HAVE_DISTINCT_FLOAT64X
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f64x ## reentrant ## _finite
> -# elif __HAVE_FLOAT64X_LONG_DOUBLE
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## l ## reentrant ## _finite
> -# else
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f128 ## reentrant ## _finite
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -# if (__HAVE_DISTINCT_FLOAT128X || (__HAVE_FLOAT128X && !defined _LIBC)) \
> - && __GLIBC_USE (IEC_60559_TYPES_EXT)
> -# define _Mdouble_ _Float128x
> -# define __MATH_DECLARING_DOUBLE 0
> -# define __MATH_DECLARING_FLOATN 1
> -# define __REDIRFROM_X(function, reentrant) \
> - function ## f128x ## reentrant
> -# if __HAVE_DISTINCT_FLOAT128X
> -# define __REDIRTO_X(function, reentrant) \
> - __ ## function ## f128x ## reentrant ## _finite
> -# else
> -# error "non-disinct _Float128x"
> -# endif
> -# include <bits/math-finite.h>
> -# undef _Mdouble_
> -# undef __MATH_DECLARING_DOUBLE
> -# undef __MATH_DECLARING_FLOATN
> -# undef __REDIRFROM_X
> -# undef __REDIRTO_X
> -# endif
> -
> -#endif /* __FINITE_MATH_ONLY__ > 0. */
>
> #if __GLIBC_USE (IEC_60559_BFP_EXT)
> /* An expression whose type has the widest of the evaluation formats
> diff --git a/sysdeps/ia64/fpu/bits/math-finite.h b/sysdeps/ia64/fpu/bits/math-finite.h
> deleted file mode 100644
> index 83b126df3fe8a213aab5e3fffd9b3149117aa281..0000000000000000000000000000000000000000
> --- a/sysdeps/ia64/fpu/bits/math-finite.h
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -/* Entry points to finite-math-only compiler runs.
> - Copyright (C) 2011-2019 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_H
> -# error "Never use <bits/math-finite.h> directly; include <math.h> instead."
> -#endif
> -
> -/* Nothing can be done for IA-64 since the math functions differ in their
> - structure. */
>