This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 3/8] x86_64: Convert __rint* and __floor* from macros to inlines.
- From: Richard Henderson <rth at twiddle dot net>
- To: libc-alpha at sourceware dot org
- Cc: joseph at codesourcery dot com
- Date: Wed, 7 Mar 2012 14:10:57 -0800
- Subject: [PATCH 3/8] x86_64: Convert __rint* and __floor* from macros to inlines.
- References: <1331158262-17508-1-git-send-email-rth@twiddle.net>
* 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