This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 3/8] x86_64: Convert __rint* and __floor* from macros to inlines.


	* sysdeps/x86_64/fpu/math_private.h (__rint): Convert from macro
	to inline function.
	(__rintf, __floor, __floorf): Likewise.

---
 sysdeps/x86_64/fpu/math_private.h |   92 +++++++++++++++++-------------------
 1 files changed, 43 insertions(+), 49 deletions(-)

diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h
index 3ec316b..87cc7ec 100644
--- a/sysdeps/x86_64/fpu/math_private.h
+++ b/sysdeps/x86_64/fpu/math_private.h
@@ -123,60 +123,54 @@ __ieee754_sqrtl (long double d)
 }
 
 #ifdef __SSE4_1__
-# ifndef __rint
-#  if defined __AVX__ || defined SSE2AVX
-#   define __rint(d) \
-  ({ double __res; \
-    asm ("vroundsd $4, %1, %0, %0" : "=x" (__res) : "xm" ((double) (d)));      \
-     __res; })
-#  else
-#   define __rint(d) \
-  ({ double __res; \
-    asm ("roundsd $4, %1, %0" : "=x" (__res) : "xm" ((double) (d)));	      \
-     __res; })
-#  endif
+extern inline double
+__rint (double d)
+{
+  double res;
+# if defined __AVX__ || defined SSE2AVX
+  asm ("vroundsd $4, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+  asm ("roundsd $4, %1, %0" : "=x" (res) : "xm" (d));
 # endif
-# ifndef __rintf
-#  if defined __AVX__ || defined SSE2AVX
-#   define __rintf(d) \
-  ({ float __res; \
-    asm ("vroundss $4, %1, %0, %0" : "=x" (__res) : "xm" ((float) (d)));      \
-     __res; })
-#  else
-#   define __rintf(d) \
-  ({ float __res; \
-    asm ("roundss $4, %1, %0" : "=x" (__res) : "xm" ((float) (d)));	      \
-     __res; })
-#  endif
+  return res;
+}
+
+extern inline float
+__rintf (float d)
+{
+  float res;
+# if defined __AVX__ || defined SSE2AVX
+  asm ("vroundss $4, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+  asm ("roundss $4, %1, %0" : "=x" (res) : "xm" (d));
 # endif
+  return res;
+}
 
-# ifndef __floor
-#  if defined __AVX__ || defined SSE2AVX
-#   define __floor(d) \
-  ({ double __res; \
-    asm ("vroundsd $1, %1, %0, %0" : "=x" (__res) : "xm" ((double) (d)));      \
-     __res; })
-#  else
-#   define __floor(d) \
-  ({ double __res; \
-    asm ("roundsd $1, %1, %0" : "=x" (__res) : "xm" ((double) (d)));	      \
-     __res; })
-#  endif
+extern inline double
+__floor (double d)
+{
+  double res;
+# if defined __AVX__ || defined SSE2AVX
+  asm ("vroundsd $1, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+  asm ("roundsd $1, %1, %0" : "=x" (res) : "xm" (d));
 # endif
-# ifndef __floorf
-#  if defined __AVX__ || defined SSE2AVX
-#   define __floorf(d) \
-  ({ float __res; \
-    asm ("vroundss $1, %1, %0, %0" : "=x" (__res) : "xm" ((float) (d)));      \
-     __res; })
-#  else
-#   define __floorf(d) \
-  ({ float __res; \
-    asm ("roundss $1, %1, %0" : "=x" (__res) : "xm" ((float) (d)));	      \
-     __res; })
+  return res;
+}
+
+extern inline float
+__floorf (float d)
+{
+  float res;
+# if defined __AVX__ || defined SSE2AVX
+  asm ("vroundss $1, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+  asm ("roundss $1, %1, %0" : "=x" (res) : "xm" (d));
 #  endif
-# endif
-#endif
+  return res;
+}
+#endif /* __SSE4_1__ */
 
 
 /* Specialized variants of the <fenv.h> interfaces which only handle
-- 
1.7.7.6


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]