From 774a2669af652979ed965d7225502ba473b2da73 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 23 Oct 2011 13:31:01 -0400 Subject: [PATCH] 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. --- sysdeps/ieee754/dbl-64/dla.h | 6 +++--- sysdeps/x86_64/dla.h | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/sysdeps/ieee754/dbl-64/dla.h b/sysdeps/ieee754/dbl-64/dla.h index af202ad..cb12dbc 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 bb6c8c4..7aa06e5 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" -- 2.7.4