about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-23 13:31:01 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-23 13:31:01 -0400
commit774a2669af652979ed965d7225502ba473b2da73 (patch)
tree93ceb2ed6f64a8678c7bafed854bda8fc3e8858a /sysdeps
parentc8b3296bbeee2f482354f833f506ac91d142e147 (diff)
downloadglibc-774a2669af652979ed965d7225502ba473b2da73.tar.gz
glibc-774a2669af652979ed965d7225502ba473b2da73.tar.xz
glibc-774a2669af652979ed965d7225502ba473b2da73.zip
Clean up FMA use
The macro's name should reflect that subtraction is being done.  And
use __builtin_fma, it seems to work after all.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/ieee754/dbl-64/dla.h6
-rw-r--r--sysdeps/x86_64/dla.h9
2 files changed, 6 insertions, 9 deletions
diff --git a/sysdeps/ieee754/dbl-64/dla.h b/sysdeps/ieee754/dbl-64/dla.h
index af202ad7a7..cb12dbc8fb 100644
--- a/sysdeps/ieee754/dbl-64/dla.h
+++ b/sysdeps/ieee754/dbl-64/dla.h
@@ -60,9 +60,9 @@
 /* satisfies z+zz = x*y exactly. p,hx,tx,hy,ty are temporary           */
 /* storage variables of type double.                                   */
 
-#ifdef DLA_FMA
+#ifdef DLA_FMS
 # define  EMULV(x,y,z,zz,p,hx,tx,hy,ty)          \
-	   z=x*y; zz=DLA_FMA(x,y,z);
+	   z=x*y; zz=DLA_FMS(x,y,z);
 #else
 # define  EMULV(x,y,z,zz,p,hx,tx,hy,ty)          \
 	   p=CN*(x);  hx=((x)-p)+p;  tx=(x)-hx; \
@@ -76,7 +76,7 @@
 /* that satisfies z+zz = x*y exactly. p,hx,tx,hy,ty,q are temporary          */
 /* storage variables of type double.                                         */
 
-#ifdef DLA_FMA
+#ifdef DLA_FMS
 # define  MUL12(x,y,z,zz,p,hx,tx,hy,ty,q)        \
 	   EMULV(x,y,z,zz,p,hx,tx,hy,ty)
 #else
diff --git a/sysdeps/x86_64/dla.h b/sysdeps/x86_64/dla.h
index bb6c8c4be0..7aa06e5f6f 100644
--- a/sysdeps/x86_64/dla.h
+++ b/sysdeps/x86_64/dla.h
@@ -1,9 +1,6 @@
-#ifdef __FMA4__
-# define DLA_FMA(x,y,z) \
-	   ({ double __zz; \
-	      asm ("vfmsubsd %3, %2, %1, %0"				      \
-		   : "=x" (__zz) : "x" (x), "xm" (y), "x" (z));		      \
-	      __zz; })
+#if defined __FMA4__ || defined __FMA__
+# define DLA_FMS(x,y,z) \
+  __builtin_fma (x, y, -z)
 #endif
 
 #include "sysdeps/ieee754/dbl-64/dla.h"