diff options
author | Richard Henderson <rth@twiddle.net> | 2012-03-06 15:58:51 -0800 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2012-03-09 11:15:47 -0800 |
commit | 15194b4b3d39e3d2099f9159f3a8abb52d37cc00 (patch) | |
tree | 2319d488746b9861828c5878aace5f6cc6425a76 /sysdeps | |
parent | 64e21edef13c6d2592f276d599d8eed01a1b1a9a (diff) | |
download | glibc-15194b4b3d39e3d2099f9159f3a8abb52d37cc00.tar.gz glibc-15194b4b3d39e3d2099f9159f3a8abb52d37cc00.tar.xz glibc-15194b4b3d39e3d2099f9159f3a8abb52d37cc00.zip |
x86_64: Convert __rint* and __floor* from macros to inlines.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | 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 07bc7e30c4..9b8d31de87 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 __always_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 __always_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 __always_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 __always_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 |