about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2012-03-07 09:16:59 -0800
committerRichard Henderson <rth@twiddle.net>2012-03-09 11:16:18 -0800
commit67bb6da6798d55fff7ed759af51799dfeca740d3 (patch)
tree3073ed92087837aec2120709e25af890a2bf503c
parent15194b4b3d39e3d2099f9159f3a8abb52d37cc00 (diff)
downloadglibc-67bb6da6798d55fff7ed759af51799dfeca740d3.tar.gz
glibc-67bb6da6798d55fff7ed759af51799dfeca740d3.tar.xz
glibc-67bb6da6798d55fff7ed759af51799dfeca740d3.zip
powerpc: Convert __ieee754_sqrt{,f} from macros to inlines.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/powerpc/fpu/math_private.h106
2 files changed, 41 insertions, 70 deletions
diff --git a/ChangeLog b/ChangeLog
index 59d7e9e822..3cc0d2dab6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-03-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrt): Convert
+	from macro to inline function; merge with the
+	!__LIBC_INTERNAL_MATH_INLINES version.
+	(__ieee754_sqrtf): Likewise.
+
 	* sysdeps/x86_64/fpu/math_private.h (__rint): Convert from macro
 	to inline function.
 	(__rintf, __floor, __floorf): Likewise.
diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h
index 7bacecb245..28628f0540 100644
--- a/sysdeps/powerpc/fpu/math_private.h
+++ b/sysdeps/powerpc/fpu/math_private.h
@@ -23,35 +23,49 @@
 #include <sysdep.h>
 #include <ldsodefs.h>
 #include <dl-procinfo.h>
-
 #include <math/math_private.h>
 
 # if __WORDSIZE == 64 || defined _ARCH_PWR4
 #  define __CPU_HAS_FSQRT 1
-
-#ifndef __ieee754_sqrt
-# define __ieee754_sqrt(x)		\
-  ({ double __z;			\
-     __asm __volatile (			\
-	"	fsqrt %0,%1\n"		\
-		: "=f" (__z)		\
-		: "f"(x));		\
-     __z; })
-#endif
-#ifndef __ieee754_sqrtf
-# define __ieee754_sqrtf(x)		\
-  ({ float __z;				\
-     __asm __volatile (			\
-	"	fsqrts %0,%1\n"		\
-		: "=f" (__z)		\
-		: "f"(x));		\
-     __z; })
-#endif
-
 # else
 #  define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
-# endif	// __WORDSIZE == 64 || defined _ARCH_PWR4
+# 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);
+
+  return __z;
+}
+
+extern float __slow_ieee754_sqrtf (float);
+extern __always_inline float
+__ieee754_sqrtf (float __x)
+{
+  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);
+
+  return __z;
+}
 
 #if defined _ARCH_PWR5X
 
@@ -162,52 +176,4 @@
 
 #endif /* defined _ARCH_PWR6 */
 
-
-# ifndef __LIBC_INTERNAL_MATH_INLINES
-extern double __slow_ieee754_sqrt (double);
-__inline double
-__ieee754_sqrt (double __x)
-{
-  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);
-
-  return __z;
-}
-
-extern float __slow_ieee754_sqrtf (float);
-
-__inline float
-__ieee754_sqrtf (float __x)
-{
-  float __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
-       fsqrts instruction above the branch.  */
-     __asm __volatile (
-	"	fsqrts	%0,%1\n"
-		: "=f" (__z)
-		: "f" (__x));
-  }
-  else
-     __z = __slow_ieee754_sqrtf(__x);
-
-  return __z;
-}
-#endif /* __LIBC_INTERNAL_MATH_INLINES */
-
 #endif /* _PPC_MATH_PRIVATE_H_ */