From 228a984d543439308632ade9a77a171c88c11afc Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 17 Oct 2011 20:30:52 -0400 Subject: Relax asm requirements for recently added x86-64 math interfaces --- ChangeLog | 4 ++++ sysdeps/x86_64/fpu/bits/mathinline.h | 12 ++++++------ sysdeps/x86_64/fpu/math_private.h | 8 ++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index e66482f3bb..081b4142ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-10-17 Ulrich Drepper + * sysdeps/x86_64/fpu/math_private.h: Relax asm requirements for + recently added interfaces. + * sysdeps/x86_64/fpu/bits/mathinline.h: Likewise. + * sysdeps/x86_64/fpu/math_private.h: Add some parenthesis to be safe about macro parameter expansion. diff --git a/sysdeps/x86_64/fpu/bits/mathinline.h b/sysdeps/x86_64/fpu/bits/mathinline.h index 721f6e4731..6221958773 100644 --- a/sysdeps/x86_64/fpu/bits/mathinline.h +++ b/sysdeps/x86_64/fpu/bits/mathinline.h @@ -156,14 +156,14 @@ __MATH_INLINE double __NTH (rint (double __x)) { double __res; - __asm ("roundsd $4, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundsd $4, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } __MATH_INLINE float __NTH (rintf (float __x)) { float __res; - __asm ("roundss $4, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundss $4, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } @@ -176,7 +176,7 @@ __MATH_INLINE double __NTH (ceil (double __x)) { double __res; - __asm ("roundsd $2, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundsd $2, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } __END_NAMESPACE_STD @@ -186,7 +186,7 @@ __MATH_INLINE float __NTH (ceilf (float __x)) { float __res; - __asm ("roundss $2, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundss $2, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } __END_NAMESPACE_C99 @@ -197,7 +197,7 @@ __MATH_INLINE double __NTH (floor (double __x)) { double __res; - __asm ("roundsd $1, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundsd $1, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } __END_NAMESPACE_STD @@ -207,7 +207,7 @@ __MATH_INLINE float __NTH (floorf (float __x)) { float __res; - __asm ("roundss $1, %1, %0" : "=x" (__res) : "x" (__x)); + __asm ("roundss $1, %1, %0" : "=x" (__res) : "xm" (__x)); return __res; } __END_NAMESPACE_C99 diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h index a66616b7a5..6cff8b3161 100644 --- a/sysdeps/x86_64/fpu/math_private.h +++ b/sysdeps/x86_64/fpu/math_private.h @@ -95,26 +95,26 @@ do { \ # ifndef __rint # define __rint(d) \ ({ double __res; \ - asm ("roundsd $4, %1, %0" : "=x" (__res) : "x" ((double) (d))); \ + asm ("roundsd $4, %1, %0" : "=x" (__res) : "xm" ((double) (d))); \ __res; }) # endif # ifndef __rintf # define __rintf(d) \ ({ float __res; \ - asm ("roundss $4, %1, %0" : "=x" (__res) : "x" ((float) (d))); \ + asm ("roundss $4, %1, %0" : "=x" (__res) : "xm" ((float) (d))); \ __res; }) # endif # ifndef __floor # define __floor(d) \ ({ double __res; \ - asm ("roundsd $1, %1, %0" : "=x" (__res) : "x" ((double) (d))); \ + asm ("roundsd $1, %1, %0" : "=x" (__res) : "xm" ((double) (d))); \ __res; }) # endif # ifndef __floorf # define __floorf(d) \ ({ float __res; \ - asm ("roundss $1, %1, %0" : "=x" (__res) : "x" ((float) (d))); \ + asm ("roundss $1, %1, %0" : "=x" (__res) : "xm" ((float) (d))); \ __res; }) # endif #endif -- cgit v1.2.3-70-g09d2