Better DLA_FMS
authorUlrich Drepper <drepper@gmail.com>
Tue, 25 Oct 2011 02:11:21 +0000 (22:11 -0400)
committerUlrich Drepper <drepper@gmail.com>
Tue, 25 Oct 2011 02:11:21 +0000 (22:11 -0400)
It's better to use __builtin_fma if it works.  Use it for gcc 4.6 and
higher.  Move the x86-64 dla.h to the correct place.

ChangeLog
sysdeps/x86_64/fpu/dla.h [moved from sysdeps/x86_64/dla.h with 63% similarity]

index 108d9a9..992ad4c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,9 @@
 2011-10-24  Ulrich Drepper  <drepper@gmail.com>
 
-       * sysdeps/x86_64/dla.h (DLA_FMS): Some compilers fail to inline
-       __builtin_fma in some situations.  Have to use an asm.
+       * sysdeps/x86_64/dla.h: Move to ...
+       * sysdeps/x86_64/fpu/dla.h: ...here.
+       (DLA_FMS): Some compilers fail to inline __builtin_fma in some
+       situations.  Use __builtin_fma only for gcc 4.6 and up.
 
        * config.make.in: Add have-mfma4 entry.
        * configure.in: Substitute libc_cv_cc_fma4.
similarity index 63%
rename from sysdeps/x86_64/dla.h
rename to sysdeps/x86_64/fpu/dla.h
index 6fe8f74..fa2d52b 100644 (file)
@@ -1,10 +1,17 @@
+#include <features.h>
+
 #ifdef __FMA4__
-# define DLA_FMS(x,y,z) \
+# if __GNUC_PREREQ (4, 6)
+#  define DLA_FMS(x,y,z) \
+  __builtin_fma (x, y, -(z))
+# else
+#  define DLA_FMS(x,y,z) \
   ({ double __z;                                                             \
      asm ("vfmsubsd %3, %2, %1, %0"                                          \
          : "=x" (__z)                                                        \
          : "x" ((double) (x)), "xm" ((double) (y)) , "x" ((double) (z)));    \
     __z; })
+# endif
 #endif
 
 #include "sysdeps/ieee754/dbl-64/dla.h"