diff mbox series

[2/3] x86: Remove feraiseexcept optimization

Message ID 20200309183234.11891-2-adhemerval.zanella@linaro.org
State Accepted
Commit 4a30b6109c119feeb95cf154382057fbf757d4da
Headers show
Series [v2,1/3] math: Remove fenvinline.h | expand

Commit Message

Adhemerval Zanella March 9, 2020, 6:32 p.m. UTC
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

-- 
2.17.1

Comments

Adhemerval Zanella via Libc-alpha March 27, 2020, 7:34 p.m. UTC | #1
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 */

>
Adhemerval Zanella via Libc-alpha March 27, 2020, 7:56 p.m. UTC | #2
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 mbox series

Patch

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