+2015-01-28 Adhemerval Zanellla <azanella@linux.vnet.ibm.com>
+
+ [BZ #16576]
+ * sysdeps/powerpc/fpu/math_private.h [__CPU_HAS_FSQRT]: Remove define
+ and use _ARCH_PPCSQ instead.
+ (__ieee754_sqrt): Likewise.
+ (__ieee754_sqrtf): Likewise.
+ * sysdeps/powerpc/fpu/e_sqrt.c (__slow_ieee754_sqrt): Build only if
+ _ARCH_PPCSQ is defined.
+ (__ieee754_sqrt): Use _ARCH_PPCSQ to select wheter to use hardware
+ fsqrt instruction.
+ * sysdeps/powerpc/fpu/e_sqrtf.c (__ieee754_sqrtf): Build only if
+ _ARCH_PPCSQ is defined.
+ (__ieee754_sqrtf): Use _ARCH_PPCSQ to select wheter to use hardware
+ fsqrts instruction.
+ * sysdeps/powerpc/powerpc64/fpu/e_sqrt.c: Remove file.
+
2016-08-15 Andreas Schwab <schwab@suse.de>
[BZ #20435]
* The following bugs are resolved with this release:
- 15946, 16009, 16545, 16574, 16623, 16657, 16695, 16743, 16758, 16759,
- 16760, 16878, 16882, 16885, 16916, 16932, 16943, 16958, 17048, 17062,
- 17069, 17079, 17137, 17153, 17213, 17263, 17269, 17325, 17523, 17555,
- 17905, 18007, 18032, 18080, 18240, 18287, 18508, 18665, 18905, 18928,
- 19018, 19779, 19791, 19879, 20010, 20112.
+ 15946, 16009, 16545, 16574, 16576, 16623, 16657, 16695, 16743, 16758,
+ 16759, 16760, 16878, 16882, 16885, 16916, 16932, 16943, 16958, 17048,
+ 17062, 17069, 17079, 17137, 17153, 17213, 17263, 17269, 17325, 17523,
+ 17555, 17905, 18007, 18032, 18080, 18240, 18287, 18508, 18665, 18905,
+ 18928, 19018, 19779, 19791, 19879, 20010, 20112.
* A buffer overflow in gethostbyname_r and related functions performing DNS
requests has been fixed. If the NSS functions were called with a
#include <sysdep.h>
#include <ldsodefs.h>
+#ifndef _ARCH_PPCSQ
static const double almost_half = 0.5000000000000001; /* 0.5 + 2^-53 */
static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
}
return f_wash (x);
}
+#endif /* _ARCH_PPCSQ */
#undef __ieee754_sqrt
double
{
double z;
- /* If the CPU is 64-bit we can use the optional FP instructions. */
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrt instruction above the branch. */
- __asm __volatile (" fsqrt %0,%1\n"
- :"=f" (z):"f" (x));
- }
- else
- z = __slow_ieee754_sqrt (x);
+#ifdef _ARCH_PPCSQ
+ asm ("fsqrt %0,%1\n" :"=f" (z):"f" (x));
+#else
+ z = __slow_ieee754_sqrt (x);
+#endif
return z;
}
#include <sysdep.h>
#include <ldsodefs.h>
+#ifndef _ARCH_PPCSQ
static const float almost_half = 0.50000006; /* 0.5 + 2^-24 */
static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
}
return f_washf (x);
}
+#endif /* _ARCH_PPCSQ */
#undef __ieee754_sqrtf
float
{
double z;
- /* If the CPU is 64-bit we can use the optional FP instructions. */
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrt instruction above the branch. */
- __asm __volatile (" fsqrts %0,%1\n"
- :"=f" (z):"f" (x));
- }
- else
- z = __slow_ieee754_sqrtf (x);
+#ifdef _ARCH_PPCSQ
+ asm ("fsqrts %0,%1\n" :"=f" (z):"f" (x));
+#else
+ z = __slow_ieee754_sqrtf (x);
+#endif
return z;
}
#include <fenv_private.h>
#include_next <math_private.h>
-# if __WORDSIZE == 64 || defined _ARCH_PWR4
-# define __CPU_HAS_FSQRT 1
-# else
-# define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
-# endif
-
extern double __slow_ieee754_sqrt (double);
extern __always_inline double
__ieee754_sqrt (double __x)
{
double __z;
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrt instruction above the branch. */
- __asm __volatile ("fsqrt %0,%1" : "=f" (__z) : "f" (__x));
- }
- else
- __z = __slow_ieee754_sqrt(__x);
+#ifdef _ARCH_PPCSQ
+ asm ("fsqrt %0,%1" : "=f" (__z) : "f" (__x));
+#else
+ __z = __slow_ieee754_sqrt(__x);
+#endif
return __z;
}
{
float __z;
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrts instruction above the branch. */
- __asm __volatile ("fsqrts %0,%1" : "=f" (__z) : "f" (__x));
- }
- else
- __z = __slow_ieee754_sqrtf(__x);
+#ifdef _ARCH_PPCSQ
+ asm ("fsqrts %0,%1" : "=f" (__z) : "f" (__x));
+#else
+ __z = __slow_ieee754_sqrtf(__x);
+#endif
return __z;
}
+++ /dev/null
-/* Double-precision floating point square root.
- Copyright (C) 1997-2014 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/>. */
-
-#include <math.h>
-#include <math_private.h>
-
-#undef __ieee754_sqrt
-double
-__ieee754_sqrt (double x)
-{
- double z;
- __asm __volatile ("fsqrt %0,%1" : "=f" (z) : "f" (x));
- return z;
-}
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+++ /dev/null
-/* Single-precision floating point square root.
- Copyright (C) 1997-2014 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/>. */
-
-#include <math.h>
-#include <math_private.h>
-
-#undef __ieee754_sqrtf
-float
-__ieee754_sqrtf (float x)
-{
- double z;
- __asm ("fsqrts %0,%1" : "=f" (z) : "f" (x));
- return z;
-}
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)