diff options
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | sysdeps/aarch64/fpu/math_private.h | 16 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/math_private.h | 26 | ||||
-rw-r--r-- | sysdeps/generic/math-type-macros.h | 2 | ||||
-rw-r--r-- | sysdeps/m68k/m680x0/fpu/mathimpl.h | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/math_private.h | 30 | ||||
-rw-r--r-- | sysdeps/s390/fpu/bits/mathinline.h | 66 | ||||
-rw-r--r-- | sysdeps/sparc/fpu/bits/mathinline.h | 80 | ||||
-rw-r--r-- | sysdeps/x86/fpu/bits/mathinline.h | 1 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/math_private.h | 32 |
10 files changed, 24 insertions, 253 deletions
@@ -27,6 +27,29 @@ 2018-03-15 Wilco Dijkstra <wdijkstr@arm.com> + * sysdeps/aarch64/fpu/math_private.h (__ieee754_sqrt): Remove. + (__ieee754_sqrtf): Remove. + * sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Remove. + (__ieee754_sqrtf): Remove. + * sysdeps/generic/math-type-macros.h (M_SQRT): Use sqrt. + * sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove. + * sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrt): Remove. + (__ieee754_sqrtf): Remove. + * sysdeps/s390/fpu/bits/mathinline.h: Remove file. + * sysdeps/sparc/fpu/bits/mathinline.h (sqrt) Remove. + (sqrtf): Remove. + (sqrtl): Remove. + (__ieee754_sqrt): Remove. + (__ieee754_sqrtf): Remove. + (__ieee754_sqrtl): Remove. + * sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove. + * sysdeps/x86/fpu/math_private.h (__ieee754_sqrt): Remove. + * sysdeps/x86_64/fpu/math_private.h (__ieee754_sqrt): Remove. + (__ieee754_sqrtf): Remove. + (__ieee754_sqrtl): Remove. + +2018-03-15 Wilco Dijkstra <wdijkstr@arm.com> + * sysdeps/ieee754/dbl-64/e_acosh.c (__ieee754_acosh): Use sqrt. * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Likewise. * sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Likewise. diff --git a/sysdeps/aarch64/fpu/math_private.h b/sysdeps/aarch64/fpu/math_private.h index 3eea86eac1..d9c2d710a9 100644 --- a/sysdeps/aarch64/fpu/math_private.h +++ b/sysdeps/aarch64/fpu/math_private.h @@ -27,22 +27,6 @@ #define math_force_eval(x) \ ({ __typeof (x) __x = (x); __asm __volatile__ ("" : : "w" (__x)); }) -extern __always_inline double -__ieee754_sqrt (double d) -{ - double res; - asm __volatile__ ("fsqrt %d0, %d1" : "=w" (res) : "w" (d)); - return res; -} - -extern __always_inline float -__ieee754_sqrtf (float s) -{ - float res; - asm __volatile__ ("fsqrt %s0, %s1" : "=w" (res) : "w" (s)); - return res; -} - static __always_inline void libc_feholdexcept_aarch64 (fenv_t *envp) { diff --git a/sysdeps/alpha/fpu/math_private.h b/sysdeps/alpha/fpu/math_private.h index 1e97c867c3..95dc32c969 100644 --- a/sysdeps/alpha/fpu/math_private.h +++ b/sysdeps/alpha/fpu/math_private.h @@ -21,30 +21,4 @@ #include_next <math_private.h> -#ifdef __alpha_fix__ -extern __always_inline double -__ieee754_sqrt (double d) -{ - double ret; -# ifdef _IEEE_FP_INEXACT - asm ("sqrtt/suid %1,%0" : "=&f"(ret) : "f"(d)); -# else - asm ("sqrtt/sud %1,%0" : "=&f"(ret) : "f"(d)); -# endif - return ret; -} - -extern __always_inline float -__ieee754_sqrtf (float d) -{ - float ret; -# ifdef _IEEE_FP_INEXACT - asm ("sqrts/suid %1,%0" : "=&f"(ret) : "f"(d)); -# else - asm ("sqrts/sud %1,%0" : "=&f"(ret) : "f"(d)); -# endif - return ret; -} -#endif /* FIX */ - #endif /* ALPHA_MATH_PRIVATE_H */ diff --git a/sysdeps/generic/math-type-macros.h b/sysdeps/generic/math-type-macros.h index 8ceaa4e02f..ffcf7b80b6 100644 --- a/sysdeps/generic/math-type-macros.h +++ b/sysdeps/generic/math-type-macros.h @@ -91,7 +91,7 @@ #define M_HYPOT M_SUF (__ieee754_hypot) #define M_LOG M_SUF (__ieee754_log) #define M_SINH M_SUF (__ieee754_sinh) -#define M_SQRT M_SUF (__ieee754_sqrt) +#define M_SQRT M_SUF (sqrt) /* Needed to evaluate M_MANT_DIG below. */ #include <float.h> diff --git a/sysdeps/m68k/m680x0/fpu/mathimpl.h b/sysdeps/m68k/m680x0/fpu/mathimpl.h index 848f9cffaa..d39094cccb 100644 --- a/sysdeps/m68k/m680x0/fpu/mathimpl.h +++ b/sysdeps/m68k/m680x0/fpu/mathimpl.h @@ -30,7 +30,6 @@ __inline_mathop (__ieee754_exp10, tentox,) __inline_mathop (__ieee754_log10, log10,) __inline_mathop (__ieee754_log2, log2,) __inline_mathop (__ieee754_log, logn,) -__inline_mathop (__ieee754_sqrt, sqrt,) __inline_mathop (__ieee754_atanh, atanh,) __m81_defun (double, __ieee754_remainder, (double __x, double __y),) diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h index 4d1e571f84..b9fc721257 100644 --- a/sysdeps/powerpc/fpu/math_private.h +++ b/sysdeps/powerpc/fpu/math_private.h @@ -42,36 +42,6 @@ __ieee754_sqrtf128 (_Float128 __x) } #endif -extern double __slow_ieee754_sqrt (double); -extern __always_inline double -__ieee754_sqrt (double __x) -{ - double __z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrt %0,%1" : "=f" (__z) : "f" (__x)); -#else - __z = __slow_ieee754_sqrt(__x); -#endif - - return __z; -} - -extern float __slow_ieee754_sqrtf (float); -extern __always_inline float -__ieee754_sqrtf (float __x) -{ - float __z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrts %0,%1" : "=f" (__z) : "f" (__x)); -#else - __z = __slow_ieee754_sqrtf(__x); -#endif - - return __z; -} - #if defined _ARCH_PWR5X # ifndef __round diff --git a/sysdeps/s390/fpu/bits/mathinline.h b/sysdeps/s390/fpu/bits/mathinline.h deleted file mode 100644 index 83ce6fa4e0..0000000000 --- a/sysdeps/s390/fpu/bits/mathinline.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Inline math functions for s390. - Copyright (C) 2004-2018 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/mathinline.h> directly; include <math.h> instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ - && defined __OPTIMIZE__ - -/* This code is used internally in the GNU libc. */ -#ifdef __LIBC_INTERNAL_MATH_INLINES - -__MATH_INLINE double -__NTH (__ieee754_sqrt (double x)) -{ - double res; - - __asm__ ( "sqdbr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} - -__MATH_INLINE float -__NTH (__ieee754_sqrtf (float x)) -{ - float res; - - __asm__ ( "sqebr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} - -# if !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -__NTH (sqrtl (long double __x)) -{ - long double res; - - __asm__ ( "sqxbr %0,%1" : "=f" (res) : "f" (__x) ); - return res; -} -# endif /* !__NO_LONG_DOUBLE_MATH */ - -#endif /* __LIBC_INTERNAL_MATH_INLINES */ - -#endif /* __NO_MATH_INLINES */ diff --git a/sysdeps/sparc/fpu/bits/mathinline.h b/sysdeps/sparc/fpu/bits/mathinline.h index 5940a1d0a0..f6118c7ca5 100644 --- a/sysdeps/sparc/fpu/bits/mathinline.h +++ b/sysdeps/sparc/fpu/bits/mathinline.h @@ -33,86 +33,6 @@ # define __MATH_INLINE __extern_inline # endif /* __cplusplus */ -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) - -# if !defined __NO_MATH_INLINES && !__GNUC_PREREQ (3, 2) - -__MATH_INLINE double -__NTH (sqrt (double __x)) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__NTH (sqrtf (float __x)) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__NTH (sqrtl (long double __x)) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt (&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -sqrtl (long double __x) __THROW -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ - -# endif /* !__NO_MATH_INLINES && !GCC 3.2+ */ - -/* This code is used internally in the GNU libc. */ -# ifdef __LIBC_INTERNAL_MATH_INLINES -__MATH_INLINE double -__ieee754_sqrt (double __x) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__ieee754_sqrtf (float __x) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt(&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ -# endif /* __LIBC_INTERNAL_MATH_INLINES */ -# endif /* gcc 2.8+ */ - # ifdef __USE_ISOC99 # ifndef __NO_MATH_INLINES diff --git a/sysdeps/x86/fpu/bits/mathinline.h b/sysdeps/x86/fpu/bits/mathinline.h index d475e162b7..d7fa3847eb 100644 --- a/sysdeps/x86/fpu/bits/mathinline.h +++ b/sysdeps/x86/fpu/bits/mathinline.h @@ -330,7 +330,6 @@ __NTH (__finite (double __x)) /* This code is used internally in the GNU libc. */ # ifdef __LIBC_INTERNAL_MATH_INLINES -__inline_mathop (__ieee754_sqrt, "fsqrt") __inline_mathcode2_ (long double, __ieee754_atan2l, __y, __x, register long double __value; __asm __volatile__ ("fpatan\n\t" diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h index 027a6a3a4d..13052893ef 100644 --- a/sysdeps/x86_64/fpu/math_private.h +++ b/sysdeps/x86_64/fpu/math_private.h @@ -48,38 +48,6 @@ #include <sysdeps/i386/fpu/fenv_private.h> #include_next <math_private.h> -extern __always_inline double -__ieee754_sqrt (double d) -{ - double res; -#if defined __AVX__ || defined SSE2AVX - asm ("vsqrtsd %1, %0, %0" : "=x" (res) : "xm" (d)); -#else - asm ("sqrtsd %1, %0" : "=x" (res) : "xm" (d)); -#endif - return res; -} - -extern __always_inline float -__ieee754_sqrtf (float d) -{ - float res; -#if defined __AVX__ || defined SSE2AVX - asm ("vsqrtss %1, %0, %0" : "=x" (res) : "xm" (d)); -#else - asm ("sqrtss %1, %0" : "=x" (res) : "xm" (d)); -#endif - return res; -} - -extern __always_inline long double -__ieee754_sqrtl (long double d) -{ - long double res; - asm ("fsqrt" : "=t" (res) : "0" (d)); - return res; -} - #ifdef __SSE4_1__ extern __always_inline double __rint (double d) |