This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch hjl/fma/master created. glibc-2.16-ports-merge-421-g305c49d


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, hjl/fma/master has been created
        at  305c49dd11726662f37d83439d283c13aa897681 (commit)

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=305c49dd11726662f37d83439d283c13aa897681

commit 305c49dd11726662f37d83439d283c13aa897681
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Oct 2 05:42:12 2012 -0700

    Check if -mfma is supported

diff --git a/ChangeLog.fma b/ChangeLog.fma
index 4a5e10b..85a2e75 100644
--- a/ChangeLog.fma
+++ b/ChangeLog.fma
@@ -1,6 +1,14 @@
 2012-10-01  H.J. Lu  <hongjiu.lu@intel.com>
 
 	[BZ #14649]
+	* config.h.in (HAVE_FMA_SUPPORT): New.
+	* config.make.in (have-mfma): Likewise.
+	* configure.in: Substitute libc_cv_cc_fma.
+	* sysdeps/i386/configure.in: Check if -mfma is supported.
+	* sysdeps/x86_64/configure.in: Likewise.
+	* configure: Regenerated.
+	* sysdeps/i386/configure: Likewise.
+	* sysdeps/x86_64/configure: LIkewise.
 	* sysdeps/x86_64/fpu/multiarch/doasin-fma.c: New file.
 	* sysdeps/x86_64/fpu/multiarch/dosincos-fma.c: Likewise.
 	* sysdeps/x86_64/fpu/multiarch/e_asin-fma.c: Likewise.
@@ -23,7 +31,7 @@
 	* sysdeps/x86_64/fpu/multiarch/slowexp-fma.c: Likewise.
 	* sysdeps/x86_64/fpu/multiarch/slowpow-fma.c: Likewise.
 	* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
-	Add FMA optimized functions.
+	Add FMA optimized functions if -mfma is supported.
 	(CFLAGS-doasin-fma.c): New.
 	(CFLAGS-dosincos-fma.c): Likewise.
 	(CFLAGS-e_asin-fma.c): Likewise.
diff --git a/config.h.in b/config.h.in
index 10a9925..fdb3878 100644
--- a/config.h.in
+++ b/config.h.in
@@ -98,6 +98,9 @@
 /* Define if gcc supports VEX encoding.  */
 #undef	HAVE_SSE2AVX_SUPPORT
 
+/* Define if gcc supports FMA.  */
+#undef	HAVE_FMA_SUPPORT
+
 /* Define if gcc supports FMA4.  */
 #undef	HAVE_FMA4_SUPPORT
 
diff --git a/config.make.in b/config.make.in
index b6d1c94..b7166e5 100644
--- a/config.make.in
+++ b/config.make.in
@@ -57,6 +57,7 @@ old-glibc-headers = @old_glibc_headers@
 unwind-find-fde = @libc_cv_gcc_unwind_find_fde@
 have-forced-unwind = @libc_cv_forced_unwind@
 have-fpie = @libc_cv_fpie@
+have-mfma = @libc_cv_cc_fma@
 have-mfma4 = @libc_cv_cc_fma4@
 have-as-vis3 = @libc_cv_sparc_as_vis3@
 gnu89-inline-CFLAGS = @gnu89_inline@
diff --git a/configure b/configure
index 739d2bd..be01b00 100755
--- a/configure
+++ b/configure
@@ -585,6 +585,7 @@ libc_cv_sparc_as_vis3
 libc_cv_as_i686
 libc_cv_cc_nofma
 libc_cv_cc_fma4
+libc_cv_cc_fma
 libc_cv_cc_novzeroupper
 libc_cv_cc_sse2avx
 libc_cv_cc_avx
@@ -7499,6 +7500,7 @@ fi
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fPIC is default" >&5
 $as_echo_n "checking whether -fPIC is default... " >&6; }
 if ${libc_cv_pic_default+:} false; then :
diff --git a/configure.in b/configure.in
index 878bf1a..cb00251 100644
--- a/configure.in
+++ b/configure.in
@@ -2151,6 +2151,7 @@ AC_SUBST(libc_cv_cc_sse4)
 AC_SUBST(libc_cv_cc_avx)
 AC_SUBST(libc_cv_cc_sse2avx)
 AC_SUBST(libc_cv_cc_novzeroupper)
+AC_SUBST(libc_cv_cc_fma)
 AC_SUBST(libc_cv_cc_fma4)
 AC_SUBST(libc_cv_cc_nofma)
 AC_SUBST(libc_cv_as_i686)
diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure
index 608ff29..9cce54c 100644
--- a/sysdeps/i386/configure
+++ b/sysdeps/i386/configure
@@ -162,6 +162,7 @@ else
 fi
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
 $as_echo_n "checking for SSE4 support... " >&6; }
 if ${libc_cv_cc_sse4+:} false; then :
@@ -254,6 +255,30 @@ if test $libc_cv_cc_sse2avx = yes; then
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA support" >&5
+$as_echo_n "checking for FMA support... " >&6; }
+if ${libc_cv_cc_fma+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if { ac_try='${CC-cc} -mfma -xc /dev/null -S -o /dev/null'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  libc_cv_cc_fma=yes
+else
+  libc_cv_cc_fma=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma" >&5
+$as_echo "$libc_cv_cc_fma" >&6; }
+if test $libc_cv_cc_fma = yes; then
+  $as_echo "#define HAVE_FMA_SUPPORT 1" >>confdefs.h
+
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA4 support" >&5
 $as_echo_n "checking for FMA4 support... " >&6; }
 if ${libc_cv_cc_fma4+:} false; then :
@@ -299,3 +324,4 @@ fi
 $as_echo "$libc_cv_cc_novzeroupper" >&6; }
 
 $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+
diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in
index 36cb3e4..dfc6e91 100644
--- a/sysdeps/i386/configure.in
+++ b/sysdeps/i386/configure.in
@@ -38,6 +38,14 @@ if test $libc_cv_cc_sse2avx = yes; then
   AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
 fi
 
+dnl Check if -mfma works.
+AC_CACHE_CHECK(for FMA support, libc_cv_cc_fma, [dnl
+LIBC_TRY_CC_OPTION([-mfma], [libc_cv_cc_fma=yes], [libc_cv_cc_fma=no])
+])
+if test $libc_cv_cc_fma = yes; then
+  AC_DEFINE(HAVE_FMA_SUPPORT)
+fi
+
 dnl Check if -mfma4 works.
 AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
 LIBC_TRY_CC_OPTION([-mfma4], [libc_cv_cc_fma4=yes], [libc_cv_cc_fma4=no])
diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure
index adbaeee..0b458ca 100644
--- a/sysdeps/x86_64/configure
+++ b/sysdeps/x86_64/configure
@@ -72,10 +72,6 @@ $as_echo X/"$0" |
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -239,6 +235,30 @@ if test $libc_cv_cc_sse2avx = yes; then
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA support" >&5
+$as_echo_n "checking for FMA support... " >&6; }
+if ${libc_cv_cc_fma+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if { ac_try='${CC-cc} -mfma -xc /dev/null -S -o /dev/null'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  libc_cv_cc_fma=yes
+else
+  libc_cv_cc_fma=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma" >&5
+$as_echo "$libc_cv_cc_fma" >&6; }
+if test $libc_cv_cc_fma = yes; then
+  $as_echo "#define HAVE_FMA_SUPPORT 1" >>confdefs.h
+
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA4 support" >&5
 $as_echo_n "checking for FMA4 support... " >&6; }
 if ${libc_cv_cc_fma4+:} false; then :
diff --git a/sysdeps/x86_64/configure.in b/sysdeps/x86_64/configure.in
index 94bcd19..4b57cb0 100644
--- a/sysdeps/x86_64/configure.in
+++ b/sysdeps/x86_64/configure.in
@@ -31,6 +31,14 @@ if test $libc_cv_cc_sse2avx = yes; then
   AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
 fi
 
+dnl Check if -mfma works.
+AC_CACHE_CHECK(for FMA support, libc_cv_cc_fma, [dnl
+LIBC_TRY_CC_OPTION([-mfma], [libc_cv_cc_fma=yes], [libc_cv_cc_fma=no])
+])
+if test $libc_cv_cc_fma = yes; then
+  AC_DEFINE(HAVE_FMA_SUPPORT)
+fi
+
 dnl Check if -mfma4 works.
 AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
 LIBC_TRY_CC_OPTION([-mfma4], [libc_cv_cc_fma4=yes], [libc_cv_cc_fma4=no])
diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index f59d5ea..86fde33 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -2,7 +2,7 @@ ifeq ($(subdir),math)
 libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \
 			s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c
 
-ifeq (yes,$(config-cflags-avx))
+ifeq ($(have-mfma),yes)
 libm-sysdep_routines += e_exp-fma e_log-fma e_pow-fma s_atan-fma \
 			e_asin-fma e_atan2-fma s_sin-fma s_tan-fma \
 			mplog-fma mpa-fma slowexp-fma slowpow-fma \
diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin.c b/sysdeps/x86_64/fpu/multiarch/e_asin.c
index 14e0859..3a363b1 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_asin.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_asin.c
@@ -1,4 +1,4 @@
-#ifdef HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2.c b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
index 8b5bafe..14ea059 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_atan2.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp.c b/sysdeps/x86_64/fpu/multiarch/e_exp.c
index 5749da4..4eea9f8 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log.c b/sysdeps/x86_64/fpu/multiarch/e_log.c
index f243c3f..f4c9517 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c
index f47fa95..b1ffe46 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan.c b/sysdeps/x86_64/fpu/multiarch/s_atan.c
index 542e656..f7cc9f8 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_atan.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_atan.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math.h>
 
diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin.c b/sysdeps/x86_64/fpu/multiarch/s_sin.c
index 9405377..aff7070 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_sin.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_sin.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math.h>
 # undef NAN
diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan.c b/sysdeps/x86_64/fpu/multiarch/s_tan.c
index 4f25592..9185c27 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_tan.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_tan.c
@@ -1,4 +1,4 @@
-#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
+#ifdef HAVE_FMA_SUPPORT
 # include <init-arch.h>
 # include <math.h>
 

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=dfdc775d8489bb3712e6fcce9933e5bc9ee1d429

commit dfdc775d8489bb3712e6fcce9933e5bc9ee1d429
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Oct 1 07:36:49 2012 -0700

    Add multiarch FMA support to x86-64 libm

diff --git a/ChangeLog.fma b/ChangeLog.fma
index 9119306..4a5e10b 100644
--- a/ChangeLog.fma
+++ b/ChangeLog.fma
@@ -1,5 +1,61 @@
 2012-10-01  H.J. Lu  <hongjiu.lu@intel.com>
 
+	[BZ #14649]
+	* sysdeps/x86_64/fpu/multiarch/doasin-fma.c: New file.
+	* sysdeps/x86_64/fpu/multiarch/dosincos-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_asin-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_atan2-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_log-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_pow-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/halfulp-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mpa-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mpatan-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mpatan2-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mpexp-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mplog-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mpsqrt-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/mptan-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_atan-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_sin-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_tan-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/sincos32-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/slowexp-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/slowpow-fma.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
+	Add FMA optimized functions.
+	(CFLAGS-doasin-fma.c): New.
+	(CFLAGS-dosincos-fma.c): Likewise.
+	(CFLAGS-e_asin-fma.c): Likewise.
+	(CFLAGS-e_atan2-fma.c): Likewise.
+	(CFLAGS-e_exp-fma.c): Likewise.
+	(CFLAGS-e_log-fma.c): Likewise.
+	(CFLAGS-e_pow-fma.c): Likewise.
+	(CFLAGS-halfulp-fma.c): Likewise.
+	(CFLAGS-mpa-fma.c): Likewise.
+	(CFLAGS-mpatan-fma.c): Likewise.
+	(CFLAGS-mpatan2-fma.c): Likewise.
+	(CFLAGS-mpexp-fma.c): Likewise.
+	(CFLAGS-mplog-fma.c): Likewise.
+	(CFLAGS-mpsqrt-fma.c): Likewise.
+	(CFLAGS-mptan-fma.c): Likewise.
+	(CFLAGS-s_atan-fma.c): Likewise.
+	(CFLAGS-sincos32-fma.c): Likewise.
+	(CFLAGS-slowexp-fma.c): Likewise.
+	(CFLAGS-slowpow-fma.c): Likewise.
+	(CFLAGS-s_sin-fma.c): Likewise.
+	(CFLAGS-s_tan-fma.c): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_asin.c: Support FMA.
+	* sysdeps/x86_64/fpu/multiarch/e_atan2.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_exp.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_log.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_pow.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_atan.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_sin.c: Likewise.
+	* sysdeps/x86_64/fpu/multiarch/s_tan.c: Likewise.
+
+2012-10-01  H.J. Lu  <hongjiu.lu@intel.com>
+
 	[BZ #14648]
 	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
 	Set bit_FMA_Usable if FMA is supported.
diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index 12b0526..f59d5ea 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -2,6 +2,37 @@ ifeq ($(subdir),math)
 libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \
 			s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c
 
+ifeq (yes,$(config-cflags-avx))
+libm-sysdep_routines += e_exp-fma e_log-fma e_pow-fma s_atan-fma \
+			e_asin-fma e_atan2-fma s_sin-fma s_tan-fma \
+			mplog-fma mpa-fma slowexp-fma slowpow-fma \
+			sincos32-fma doasin-fma dosincos-fma \
+			halfulp-fma mpexp-fma \
+			mpatan2-fma mpatan-fma mpsqrt-fma mptan-fma
+
+CFLAGS-doasin-fma.c = -mfma
+CFLAGS-dosincos-fma.c = -mfma
+CFLAGS-e_asin-fma.c = -mfma
+CFLAGS-e_atan2-fma.c = -mfma
+CFLAGS-e_exp-fma.c = -mfma
+CFLAGS-e_log-fma.c = -mfma
+CFLAGS-e_pow-fma.c = -mfma
+CFLAGS-halfulp-fma.c = -mfma
+CFLAGS-mpa-fma.c = -mfma
+CFLAGS-mpatan-fma.c = -mfma
+CFLAGS-mpatan2-fma.c = -mfma
+CFLAGS-mpexp-fma.c = -mfma
+CFLAGS-mplog-fma.c = -mfma
+CFLAGS-mpsqrt-fma.c = -mfma
+CFLAGS-mptan-fma.c = -mfma
+CFLAGS-s_atan-fma.c = -mfma
+CFLAGS-sincos32-fma.c = -mfma
+CFLAGS-slowexp-fma.c = -mfma
+CFLAGS-slowpow-fma.c = -mfma
+CFLAGS-s_sin-fma.c = -mfma
+CFLAGS-s_tan-fma.c = -mfma
+endif
+
 ifeq ($(have-mfma4),yes)
 libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \
 			e_asin-fma4 e_atan2-fma4 s_sin-fma4 s_tan-fma4 \
diff --git a/sysdeps/x86_64/fpu/multiarch/doasin-fma.c b/sysdeps/x86_64/fpu/multiarch/doasin-fma.c
new file mode 100644
index 0000000..7a09865
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/doasin-fma.c
@@ -0,0 +1,4 @@
+#define __doasin __doasin_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/doasin.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/dosincos-fma.c b/sysdeps/x86_64/fpu/multiarch/dosincos-fma.c
new file mode 100644
index 0000000..5744586
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/dosincos-fma.c
@@ -0,0 +1,6 @@
+#define __docos __docos_fma
+#define __dubcos __dubcos_fma
+#define __dubsin __dubsin_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/dosincos.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin-fma.c b/sysdeps/x86_64/fpu/multiarch/e_asin-fma.c
new file mode 100644
index 0000000..50e9c64
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_asin-fma.c
@@ -0,0 +1,11 @@
+#define __ieee754_acos __ieee754_acos_fma
+#define __ieee754_asin __ieee754_asin_fma
+#define __cos32 __cos32_fma
+#define __doasin __doasin_fma
+#define __docos __docos_fma
+#define __dubcos __dubcos_fma
+#define __dubsin __dubsin_fma
+#define __sin32 __sin32_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/e_asin.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin.c b/sysdeps/x86_64/fpu/multiarch/e_asin.c
index e742a9c..14e0859 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_asin.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_asin.c
@@ -1,18 +1,29 @@
-#ifdef HAVE_FMA4_SUPPORT
+#ifdef HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
 extern double __ieee754_acos_sse2 (double);
 extern double __ieee754_asin_sse2 (double);
+extern double __ieee754_acos_fma (double);
+extern double __ieee754_asin_fma (double);
+# ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_acos_fma4 (double);
 extern double __ieee754_asin_fma4 (double);
+# else
+#  undef HAS_FMA4
+#  define HAS_FMA4 0
+#  define __ieee754_acos_fma4 ((void *) 0)
+#  define __ieee754_asin_fma4 ((void *) 0)
+# endif
 
 libm_ifunc (__ieee754_acos,
-	    HAS_FMA4 ? __ieee754_acos_fma4 : __ieee754_acos_sse2);
+	    HAS_FMA ? __ieee754_acos_fma
+	    : (HAS_FMA4 ? __ieee754_acos_fma4 : __ieee754_acos_sse2));
 strong_alias (__ieee754_acos, __acos_finite)
 
 libm_ifunc (__ieee754_asin,
-	    HAS_FMA4 ? __ieee754_asin_fma4 : __ieee754_asin_sse2);
+	    HAS_FMA ? __ieee754_asin_fma 
+	    : (HAS_FMA4 ? __ieee754_asin_fma4 : __ieee754_asin_sse2));
 strong_alias (__ieee754_asin, __asin_finite)
 
 # define __ieee754_acos __ieee754_acos_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2-fma.c b/sysdeps/x86_64/fpu/multiarch/e_atan2-fma.c
new file mode 100644
index 0000000..caba686
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_atan2-fma.c
@@ -0,0 +1,10 @@
+#define __ieee754_atan2 __ieee754_atan2_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __dvd __dvd_fma
+#define __mpatan2 __mpatan2_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/e_atan2.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2.c b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
index 6867c6e..8b5bafe 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_atan2.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
@@ -4,6 +4,7 @@
 
 extern double __ieee754_atan2_sse2 (double, double);
 extern double __ieee754_atan2_avx (double, double);
+extern double __ieee754_atan2_fma (double, double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_atan2_fma4 (double, double);
 # else
@@ -13,8 +14,9 @@ extern double __ieee754_atan2_fma4 (double, double);
 # endif
 
 libm_ifunc (__ieee754_atan2,
-	    HAS_FMA4 ? __ieee754_atan2_fma4
-	    : (HAS_AVX ? __ieee754_atan2_avx : __ieee754_atan2_sse2));
+	    HAS_FMA ? __ieee754_atan2_fma
+	    : (HAS_FMA4 ? __ieee754_atan2_fma4
+	       : (HAS_AVX ? __ieee754_atan2_avx : __ieee754_atan2_sse2)));
 strong_alias (__ieee754_atan2, __atan2_finite)
 
 # define __ieee754_atan2 __ieee754_atan2_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c b/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
new file mode 100644
index 0000000..6e0fdb7
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
@@ -0,0 +1,6 @@
+#define __ieee754_exp __ieee754_exp_fma
+#define __exp1 __exp1_fma
+#define __slowexp __slowexp_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp.c b/sysdeps/x86_64/fpu/multiarch/e_exp.c
index 3c65028..5749da4 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp.c
@@ -4,6 +4,7 @@
 
 extern double __ieee754_exp_sse2 (double);
 extern double __ieee754_exp_avx (double);
+extern double __ieee754_exp_fma (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_exp_fma4 (double);
 # else
@@ -13,8 +14,9 @@ extern double __ieee754_exp_fma4 (double);
 # endif
 
 libm_ifunc (__ieee754_exp,
-	    HAS_FMA4 ? __ieee754_exp_fma4
-	    : (HAS_AVX ? __ieee754_exp_avx : __ieee754_exp_sse2));
+	    HAS_FMA ? __ieee754_exp_fma
+	    : (HAS_FMA4 ? __ieee754_exp_fma4
+	       : (HAS_AVX ? __ieee754_exp_avx : __ieee754_exp_sse2)));
 strong_alias (__ieee754_exp, __exp_finite)
 
 # define __ieee754_exp __ieee754_exp_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-fma.c b/sysdeps/x86_64/fpu/multiarch/e_log-fma.c
new file mode 100644
index 0000000..a7123b1
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_log-fma.c
@@ -0,0 +1,8 @@
+#define __ieee754_log __ieee754_log_fma
+#define __mplog __mplog_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log.c b/sysdeps/x86_64/fpu/multiarch/e_log.c
index 05f3668..f243c3f 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log.c
@@ -4,6 +4,7 @@
 
 extern double __ieee754_log_sse2 (double);
 extern double __ieee754_log_avx (double);
+extern double __ieee754_log_fma (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_log_fma4 (double);
 # else
@@ -13,8 +14,9 @@ extern double __ieee754_log_fma4 (double);
 # endif
 
 libm_ifunc (__ieee754_log,
-	    HAS_FMA4 ? __ieee754_log_fma4
-	    : (HAS_AVX ? __ieee754_log_avx : __ieee754_log_sse2));
+	    HAS_FMA ? __ieee754_log_fma
+	    : (HAS_FMA4 ? __ieee754_log_fma4
+	       : (HAS_AVX ? __ieee754_log_avx : __ieee754_log_sse2)));
 strong_alias (__ieee754_log, __log_finite)
 
 # define __ieee754_log __ieee754_log_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
new file mode 100644
index 0000000..6fd4083
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
@@ -0,0 +1,6 @@
+#define __ieee754_pow __ieee754_pow_fma
+#define __exp1 __exp1_fma
+#define __slowpow __slowpow_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c
index a740b6c..f47fa95 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow.c
@@ -1,11 +1,21 @@
-#ifdef HAVE_FMA4_SUPPORT
+#if defined HAVE_FMA4_SUPPORT || defined HAVE_AVX_SUPPORT
 # include <init-arch.h>
 # include <math_private.h>
 
 extern double __ieee754_pow_sse2 (double, double);
+extern double __ieee754_pow_fma (double, double);
+
+# ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_pow_fma4 (double, double);
+# else
+#  undef HAS_FMA4
+#  define HAS_FMA4 0
+#  define __ieee754_pow_fma4 ((void *) 0)
+# endif
 
-libm_ifunc (__ieee754_pow, HAS_FMA4 ? __ieee754_pow_fma4 : __ieee754_pow_sse2);
+libm_ifunc (__ieee754_pow,
+	    HAS_FMA ? __ieee754_pow_fma
+	    : (HAS_FMA4 ? __ieee754_pow_fma4 : __ieee754_pow_sse2));
 strong_alias (__ieee754_pow, __pow_finite)
 
 # define __ieee754_pow __ieee754_pow_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/halfulp-fma.c b/sysdeps/x86_64/fpu/multiarch/halfulp-fma.c
new file mode 100644
index 0000000..6ca7046
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/halfulp-fma.c
@@ -0,0 +1,4 @@
+#define __halfulp __halfulp_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/halfulp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mpa-fma.c b/sysdeps/x86_64/fpu/multiarch/mpa-fma.c
new file mode 100644
index 0000000..5c182a7
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mpa-fma.c
@@ -0,0 +1,12 @@
+#define __add __add_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define __dbl_mp __dbl_mp_fma
+#define __dvd __dvd_fma
+
+#define NO___CPY 1
+#define NO___MP_DBL 1
+#define NO___ACR 1
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mpa.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mpatan-fma.c b/sysdeps/x86_64/fpu/multiarch/mpatan-fma.c
new file mode 100644
index 0000000..d216f91
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mpatan-fma.c
@@ -0,0 +1,10 @@
+#define __mpatan __mpatan_fma
+#define __add __add_fma
+#define __dvd __dvd_fma
+#define __mpsqrt __mpsqrt_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define AVOID_MPATAN_H 1
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mpatan.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mpatan2-fma.c b/sysdeps/x86_64/fpu/multiarch/mpatan2-fma.c
new file mode 100644
index 0000000..98df336
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mpatan2-fma.c
@@ -0,0 +1,9 @@
+#define __mpatan2 __mpatan2_fma
+#define __add __add_fma
+#define __dvd __dvd_fma
+#define __mpatan __mpatan_fma
+#define __mpsqrt __mpsqrt_fma
+#define __mul __mul_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mpatan2.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mpexp-fma.c b/sysdeps/x86_64/fpu/multiarch/mpexp-fma.c
new file mode 100644
index 0000000..637631b
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mpexp-fma.c
@@ -0,0 +1,9 @@
+#define __mpexp __mpexp_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __dvd __dvd_fma
+#define __mul __mul_fma
+#define AVOID_MPEXP_H 1
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mpexp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mplog-fma.c b/sysdeps/x86_64/fpu/multiarch/mplog-fma.c
new file mode 100644
index 0000000..645b6b7
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mplog-fma.c
@@ -0,0 +1,8 @@
+#define __mplog __mplog_fma
+#define __add __add_fma
+#define __mpexp __mpexp_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mplog.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma.c b/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma.c
new file mode 100644
index 0000000..44d7a23
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma.c
@@ -0,0 +1,8 @@
+#define __mpsqrt __mpsqrt_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define AVOID_MPSQRT_H 1
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mpsqrt.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/mptan-fma.c b/sysdeps/x86_64/fpu/multiarch/mptan-fma.c
new file mode 100644
index 0000000..d1a6914
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/mptan-fma.c
@@ -0,0 +1,7 @@
+#define __mptan __mptan_fma
+#define __c32 __c32_fma
+#define __dvd __dvd_fma
+#define __mpranred __mpranred_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/mptan.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan-fma.c b/sysdeps/x86_64/fpu/multiarch/s_atan-fma.c
new file mode 100644
index 0000000..bedb3f2
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_atan-fma.c
@@ -0,0 +1,9 @@
+#define atan __atan_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mpatan __mpatan_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/s_atan.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan.c b/sysdeps/x86_64/fpu/multiarch/s_atan.c
index ae16d7c..542e656 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_atan.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_atan.c
@@ -4,6 +4,7 @@
 
 extern double __atan_sse2 (double);
 extern double __atan_avx (double);
+extern double __atan_fma (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __atan_fma4 (double);
 # else
@@ -12,8 +13,9 @@ extern double __atan_fma4 (double);
 #  define __atan_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (atan, (HAS_FMA4 ? __atan_fma4 :
-		   HAS_AVX ? __atan_avx : __atan_sse2));
+libm_ifunc (atan, (HAS_FMA ? __atan_fma :
+		   (HAS_FMA4 ? __atan_fma4 :
+		    HAS_AVX ? __atan_avx : __atan_sse2)));
 
 # define atan __atan_sse2
 #endif
diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin-fma.c b/sysdeps/x86_64/fpu/multiarch/s_sin-fma.c
new file mode 100644
index 0000000..15f3c39
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_sin-fma.c
@@ -0,0 +1,11 @@
+#define __cos __cos_fma
+#define __sin __sin_fma
+#define __docos __docos_fma
+#define __dubsin __dubsin_fma
+#define __mpcos __mpcos_fma
+#define __mpcos1 __mpcos1_fma
+#define __mpsin __mpsin_fma
+#define __mpsin1 __mpsin1_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/s_sin.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin.c b/sysdeps/x86_64/fpu/multiarch/s_sin.c
index a0c2521..9405377 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_sin.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_sin.c
@@ -7,6 +7,8 @@ extern double __cos_sse2 (double);
 extern double __sin_sse2 (double);
 extern double __cos_avx (double);
 extern double __sin_avx (double);
+extern double __cos_fma (double);
+extern double __sin_fma (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __cos_fma4 (double);
 extern double __sin_fma4 (double);
@@ -17,12 +19,14 @@ extern double __sin_fma4 (double);
 #  define __sin_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (__cos, (HAS_FMA4 ? __cos_fma4 :
-		    HAS_AVX ? __cos_avx : __cos_sse2));
+libm_ifunc (__cos, (HAS_FMA ? __cos_fma :
+		    (HAS_FMA4 ? __cos_fma4 :
+		     HAS_AVX ? __cos_avx : __cos_sse2)));
 weak_alias (__cos, cos)
 
-libm_ifunc (__sin, (HAS_FMA4 ? __sin_fma4 :
-		    HAS_AVX ? __sin_avx : __sin_sse2));
+libm_ifunc (__sin, (HAS_FMA ? __sin_fma :
+		    (HAS_FMA4 ? __sin_fma4 :
+		     HAS_AVX ? __sin_avx : __sin_sse2)));
 weak_alias (__sin, sin)
 
 # define __cos __cos_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan-fma.c b/sysdeps/x86_64/fpu/multiarch/s_tan-fma.c
new file mode 100644
index 0000000..c85f8bc
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/s_tan-fma.c
@@ -0,0 +1,8 @@
+#define tan __tan_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mpranred __mpranred_fma
+#define __mptan __mptan_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/s_tan.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan.c b/sysdeps/x86_64/fpu/multiarch/s_tan.c
index 904308f..4f25592 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_tan.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_tan.c
@@ -4,6 +4,7 @@
 
 extern double __tan_sse2 (double);
 extern double __tan_avx (double);
+extern double __tan_fma (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __tan_fma4 (double);
 # else
@@ -12,8 +13,9 @@ extern double __tan_fma4 (double);
 #  define __tan_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (tan, (HAS_FMA4 ? __tan_fma4 :
-		  HAS_AVX ? __tan_avx : __tan_sse2));
+libm_ifunc (tan, (HAS_FMA ? __tan_fma :
+		  (HAS_FMA4 ? __tan_fma4 :
+		   HAS_AVX ? __tan_avx : __tan_sse2)));
 
 # define tan __tan_sse2
 #endif
diff --git a/sysdeps/x86_64/fpu/multiarch/sincos32-fma.c b/sysdeps/x86_64/fpu/multiarch/sincos32-fma.c
new file mode 100644
index 0000000..dcd44bc
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/sincos32-fma.c
@@ -0,0 +1,15 @@
+#define __cos32 __cos32_fma
+#define __sin32 __sin32_fma
+#define __c32 __c32_fma
+#define __mpsin __mpsin_fma
+#define __mpsin1 __mpsin1_fma
+#define __mpcos __mpcos_fma
+#define __mpcos1 __mpcos1_fma
+#define __mpranred __mpranred_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/sincos32.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/slowexp-fma.c b/sysdeps/x86_64/fpu/multiarch/slowexp-fma.c
new file mode 100644
index 0000000..6fffca1
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/slowexp-fma.c
@@ -0,0 +1,9 @@
+#define __slowexp __slowexp_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mpexp __mpexp_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/slowexp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/slowpow-fma.c b/sysdeps/x86_64/fpu/multiarch/slowpow-fma.c
new file mode 100644
index 0000000..160ed68
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/slowpow-fma.c
@@ -0,0 +1,11 @@
+#define __slowpow __slowpow_fma
+#define __add __add_fma
+#define __dbl_mp __dbl_mp_fma
+#define __mpexp __mpexp_fma
+#define __mplog __mplog_fma
+#define __mul __mul_fma
+#define __sub __sub_fma
+#define __halfulp __halfulp_fma
+#define SECTION __attribute__ ((section (".text.fma")))
+
+#include <sysdeps/ieee754/dbl-64/slowpow.c>

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b8a9759a524774747e4fbc267c3c21549ab0fbb3

commit b8a9759a524774747e4fbc267c3c21549ab0fbb3
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Oct 1 06:37:53 2012 -0700

    Define HAS_FMA with bit_FMA_Usable

diff --git a/ChangeLog.fma b/ChangeLog.fma
new file mode 100644
index 0000000..9119306
--- /dev/null
+++ b/ChangeLog.fma
@@ -0,0 +1,11 @@
+2012-10-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #14648]
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Set bit_FMA_Usable if FMA is supported.
+	* sysdeps/x86_64/multiarch/init-arch.h (bit_FMA_Usable): New
+	macro.
+	(bit_FMA4_Usable): Updated.
+	(index_FMA_Usable): New macro.
+	(CPUID_FMA): Likewise
+	(HAS_FMA): Defined with bit_FMA_Usable.

-----------------------------------------------------------------------


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]