[PATCH 2/3] x86: Remove feraiseexcept optimization
H.J. Lu
hjl.tools@gmail.com
Fri Mar 27 19:56:24 GMT 2020
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.
More information about the Libc-alpha
mailing list