Message ID | 20200309183234.11891-2-adhemerval.zanella@linaro.org |
---|---|
State | Accepted |
Commit | 4a30b6109c119feeb95cf154382057fbf757d4da |
Headers | show |
Series | [v2,1/3] math: Remove fenvinline.h | expand |
Ping. On 09/03/2020 15:32, Adhemerval Zanella wrote: > Similar to fenvinline.h removal, this kind of optimization is better > implemented by the compiler. Also newer code avoid setting exceptions > directly (for instance the code to make new logf, log2f and powf > implementatation to now support SVID compat). > > Checked on x86_64-linux-gnu and i686-linux-gnu. > --- > sysdeps/x86/fpu/bits/fenv.h | 54 --------------------------- > sysdeps/x86/fpu/include/bits/fenv.h | 57 ----------------------------- > 2 files changed, 111 deletions(-) > delete mode 100644 sysdeps/x86/fpu/include/bits/fenv.h > > diff --git a/sysdeps/x86/fpu/bits/fenv.h b/sysdeps/x86/fpu/bits/fenv.h > index eb78eb4b2d..6cfa5678eb 100644 > --- a/sysdeps/x86/fpu/bits/fenv.h > +++ b/sysdeps/x86/fpu/bits/fenv.h > @@ -114,57 +114,3 @@ femode_t; > /* Default floating-point control modes. */ > # define FE_DFL_MODE ((const femode_t *) -1L) > #endif > - > - > -#ifdef __USE_EXTERN_INLINES > -__BEGIN_DECLS > - > -/* Optimized versions. */ > -#ifndef _LIBC > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); > -#endif > -__extern_always_inline void > -__NTH (__feraiseexcept_invalid_divbyzero (int __excepts)) > -{ > - if ((FE_INVALID & __excepts) != 0) > - { > - /* One example of an invalid operation is 0.0 / 0.0. */ > - float __f = 0.0; > - > -# ifdef __SSE_MATH__ > - __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f)); > -# else > - __asm__ __volatile__ ("fdiv %%st, %%st(0); fwait" > - : "=t" (__f) : "0" (__f)); > -# endif > - (void) &__f; > - } > - if ((FE_DIVBYZERO & __excepts) != 0) > - { > - float __f = 1.0; > - float __g = 0.0; > - > -# ifdef __SSE_MATH__ > - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); > -# else > - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" > - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); > -# endif > - (void) &__f; > - } > -} > -__extern_inline int > -__NTH (feraiseexcept (int __excepts)) > -{ > - if (__builtin_constant_p (__excepts) > - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) > - { > - __feraiseexcept_invalid_divbyzero (__excepts); > - return 0; > - } > - > - return __feraiseexcept_renamed (__excepts); > -} > - > -__END_DECLS > -#endif > diff --git a/sysdeps/x86/fpu/include/bits/fenv.h b/sysdeps/x86/fpu/include/bits/fenv.h > deleted file mode 100644 > index dd3f61e9f3..0000000000 > --- a/sysdeps/x86/fpu/include/bits/fenv.h > +++ /dev/null > @@ -1,57 +0,0 @@ > -/* Wrapper for x86 bits/fenv.h for use when building glibc. > - Copyright (C) 1997-2020 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 > - <https://www.gnu.org/licenses/>. */ > - > -#ifndef _BITS_FENV_H > - > -#if defined _LIBC && defined __USE_EXTERN_INLINES > -# if defined SHARED && !defined NO_HIDDEN && IS_IN (libm) > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), __GI_feraiseexcept); > -# else > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); > -# endif > -#endif > - > -#include_next <bits/fenv.h> > - > -# ifndef _ISOMAC > - > -/* Ensure __feraiseexcept calls in glibc are optimized the same as > - feraiseexcept calls. */ > - > -#ifdef __USE_EXTERN_INLINES > -__BEGIN_DECLS > - > -extern int __REDIRECT_NTH (____feraiseexcept_renamed, (int), __feraiseexcept); > -__extern_inline int > -__NTH (__feraiseexcept (int __excepts)) > -{ > - if (__builtin_constant_p (__excepts) > - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) > - { > - __feraiseexcept_invalid_divbyzero (__excepts); > - return 0; > - } > - > - return ____feraiseexcept_renamed (__excepts); > -} > - > -__END_DECLS > -#endif > - > -# endif /* _ISOMAC */ > -#endif /* bits/fenv.h */ >
On Fri, Mar 27, 2020 at 12:35 PM Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> wrote: > > > Ping. > > On 09/03/2020 15:32, Adhemerval Zanella wrote: > > Similar to fenvinline.h removal, this kind of optimization is better > > implemented by the compiler. Also newer code avoid setting exceptions > > directly (for instance the code to make new logf, log2f and powf > > implementatation to now support SVID compat). > > > > Checked on x86_64-linux-gnu and i686-linux-gnu. > > --- > > sysdeps/x86/fpu/bits/fenv.h | 54 --------------------------- > > sysdeps/x86/fpu/include/bits/fenv.h | 57 ----------------------------- > > 2 files changed, 111 deletions(-) > > delete mode 100644 sysdeps/x86/fpu/include/bits/fenv.h > > > > diff --git a/sysdeps/x86/fpu/bits/fenv.h b/sysdeps/x86/fpu/bits/fenv.h > > index eb78eb4b2d..6cfa5678eb 100644 > > --- a/sysdeps/x86/fpu/bits/fenv.h > > +++ b/sysdeps/x86/fpu/bits/fenv.h > > @@ -114,57 +114,3 @@ femode_t; > > /* Default floating-point control modes. */ > > # define FE_DFL_MODE ((const femode_t *) -1L) > > #endif > > - > > - > > -#ifdef __USE_EXTERN_INLINES > > -__BEGIN_DECLS > > - > > -/* Optimized versions. */ > > -#ifndef _LIBC > > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); > > -#endif > > -__extern_always_inline void > > -__NTH (__feraiseexcept_invalid_divbyzero (int __excepts)) > > -{ > > - if ((FE_INVALID & __excepts) != 0) > > - { > > - /* One example of an invalid operation is 0.0 / 0.0. */ > > - float __f = 0.0; > > - > > -# ifdef __SSE_MATH__ > > - __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f)); > > -# else > > - __asm__ __volatile__ ("fdiv %%st, %%st(0); fwait" > > - : "=t" (__f) : "0" (__f)); > > -# endif > > - (void) &__f; > > - } > > - if ((FE_DIVBYZERO & __excepts) != 0) > > - { > > - float __f = 1.0; > > - float __g = 0.0; > > - > > -# ifdef __SSE_MATH__ > > - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); > > -# else > > - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" > > - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); > > -# endif > > - (void) &__f; > > - } > > -} > > -__extern_inline int > > -__NTH (feraiseexcept (int __excepts)) > > -{ > > - if (__builtin_constant_p (__excepts) > > - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) > > - { > > - __feraiseexcept_invalid_divbyzero (__excepts); > > - return 0; > > - } > > - > > - return __feraiseexcept_renamed (__excepts); > > -} > > - > > -__END_DECLS > > -#endif > > diff --git a/sysdeps/x86/fpu/include/bits/fenv.h b/sysdeps/x86/fpu/include/bits/fenv.h > > deleted file mode 100644 > > index dd3f61e9f3..0000000000 > > --- a/sysdeps/x86/fpu/include/bits/fenv.h > > +++ /dev/null > > @@ -1,57 +0,0 @@ > > -/* Wrapper for x86 bits/fenv.h for use when building glibc. > > - Copyright (C) 1997-2020 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 > > - <https://www.gnu.org/licenses/>. */ > > - > > -#ifndef _BITS_FENV_H > > - > > -#if defined _LIBC && defined __USE_EXTERN_INLINES > > -# if defined SHARED && !defined NO_HIDDEN && IS_IN (libm) > > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), __GI_feraiseexcept); > > -# else > > -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); > > -# endif > > -#endif > > - > > -#include_next <bits/fenv.h> > > - > > -# ifndef _ISOMAC > > - > > -/* Ensure __feraiseexcept calls in glibc are optimized the same as > > - feraiseexcept calls. */ > > - > > -#ifdef __USE_EXTERN_INLINES > > -__BEGIN_DECLS > > - > > -extern int __REDIRECT_NTH (____feraiseexcept_renamed, (int), __feraiseexcept); > > -__extern_inline int > > -__NTH (__feraiseexcept (int __excepts)) > > -{ > > - if (__builtin_constant_p (__excepts) > > - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) > > - { > > - __feraiseexcept_invalid_divbyzero (__excepts); > > - return 0; > > - } > > - > > - return ____feraiseexcept_renamed (__excepts); > > -} > > - > > -__END_DECLS > > -#endif > > - > > -# endif /* _ISOMAC */ > > -#endif /* bits/fenv.h */ > > LGTM. Thanks. -- H.J.
diff --git a/sysdeps/x86/fpu/bits/fenv.h b/sysdeps/x86/fpu/bits/fenv.h index eb78eb4b2d..6cfa5678eb 100644 --- a/sysdeps/x86/fpu/bits/fenv.h +++ b/sysdeps/x86/fpu/bits/fenv.h @@ -114,57 +114,3 @@ femode_t; /* Default floating-point control modes. */ # define FE_DFL_MODE ((const femode_t *) -1L) #endif - - -#ifdef __USE_EXTERN_INLINES -__BEGIN_DECLS - -/* Optimized versions. */ -#ifndef _LIBC -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); -#endif -__extern_always_inline void -__NTH (__feraiseexcept_invalid_divbyzero (int __excepts)) -{ - if ((FE_INVALID & __excepts) != 0) - { - /* One example of an invalid operation is 0.0 / 0.0. */ - float __f = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f)); -# else - __asm__ __volatile__ ("fdiv %%st, %%st(0); fwait" - : "=t" (__f) : "0" (__f)); -# endif - (void) &__f; - } - if ((FE_DIVBYZERO & __excepts) != 0) - { - float __f = 1.0; - float __g = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); -# else - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); -# endif - (void) &__f; - } -} -__extern_inline int -__NTH (feraiseexcept (int __excepts)) -{ - if (__builtin_constant_p (__excepts) - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) - { - __feraiseexcept_invalid_divbyzero (__excepts); - return 0; - } - - return __feraiseexcept_renamed (__excepts); -} - -__END_DECLS -#endif diff --git a/sysdeps/x86/fpu/include/bits/fenv.h b/sysdeps/x86/fpu/include/bits/fenv.h deleted file mode 100644 index dd3f61e9f3..0000000000 --- a/sysdeps/x86/fpu/include/bits/fenv.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Wrapper for x86 bits/fenv.h for use when building glibc. - Copyright (C) 1997-2020 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 - <https://www.gnu.org/licenses/>. */ - -#ifndef _BITS_FENV_H - -#if defined _LIBC && defined __USE_EXTERN_INLINES -# if defined SHARED && !defined NO_HIDDEN && IS_IN (libm) -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), __GI_feraiseexcept); -# else -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); -# endif -#endif - -#include_next <bits/fenv.h> - -# ifndef _ISOMAC - -/* Ensure __feraiseexcept calls in glibc are optimized the same as - feraiseexcept calls. */ - -#ifdef __USE_EXTERN_INLINES -__BEGIN_DECLS - -extern int __REDIRECT_NTH (____feraiseexcept_renamed, (int), __feraiseexcept); -__extern_inline int -__NTH (__feraiseexcept (int __excepts)) -{ - if (__builtin_constant_p (__excepts) - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) - { - __feraiseexcept_invalid_divbyzero (__excepts); - return 0; - } - - return ____feraiseexcept_renamed (__excepts); -} - -__END_DECLS -#endif - -# endif /* _ISOMAC */ -#endif /* bits/fenv.h */