From: Richard Henderson Date: Tue, 6 Mar 2012 23:58:51 +0000 (-0800) Subject: x86_64: Convert __rint* and __floor* from macros to inlines. X-Git-Tag: glibc-2.16-tps~847 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15194b4b3d39e3d2099f9159f3a8abb52d37cc00;p=thirdparty%2Fglibc.git x86_64: Convert __rint* and __floor* from macros to inlines. --- diff --git a/ChangeLog b/ChangeLog index d8d167aaa21..59d7e9e8221 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-03-08 Richard Henderson + * 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 (__ieee754_sqrt): Convert from macro to inline function. (__ieee754_sqrtf, __ieee754_sqrtl): Likewise. diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h index 07bc7e30c49..9b8d31de872 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 interfaces which only handle