[PATCH 2/3] x86: Remove feraiseexcept optimization

Adhemerval Zanella adhemerval.zanella@linaro.org
Fri Mar 27 19:34:03 GMT 2020


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 */
> 


More information about the Libc-alpha mailing list