about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-10-02 05:05:17 -0700
committerH.J. Lu <hjl.tools@gmail.com>2012-10-02 05:05:17 -0700
commit0569936773c861c791f10bba5e2f4cac5fbb4e78 (patch)
treefa6478e2fd9f2b8bf1310b23a1c6518db6299f65
parent40d4a87bb557e5667e8ad72351bbd4bce5e2c0bc (diff)
downloadglibc-0569936773c861c791f10bba5e2f4cac5fbb4e78.tar.gz
glibc-0569936773c861c791f10bba5e2f4cac5fbb4e78.tar.xz
glibc-0569936773c861c791f10bba5e2f4cac5fbb4e78.zip
Define HAS_FMA with bit_FMA_Usable
-rw-r--r--ChangeLog12
-rw-r--r--NEWS2
-rw-r--r--sysdeps/x86_64/multiarch/init-arch.c3
-rw-r--r--sysdeps/x86_64/multiarch/init-arch.h9
4 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f5183fac7a..d121446ac1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2012-10-02  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.
+
 2012-10-01  Roland McGrath  <roland@hack.frob.com>
 
 	* bits/types.h (__swblk_t): Type removed.
diff --git a/NEWS b/NEWS
index fe7c78d4f6..3d62725666 100644
--- a/NEWS
+++ b/NEWS
@@ -15,7 +15,7 @@ Version 2.17
   14195, 14237, 14252, 14283, 14298, 14303, 14307, 14328, 14331, 14336,
   14337, 14347, 14349, 14376, 14459, 14476, 14477, 14505, 14510, 14516,
   14518, 14519, 14530, 14532, 14538, 14543, 14544, 14545, 14562, 14576,
-  14579, 14583, 14587, 14621, 14638, 14645.
+  14579, 14583, 14587, 14621, 14638, 14645, 14648.
 
 * Support for STT_GNU_IFUNC symbols added for s390 and s390x.
   Optimized versions of memcpy, memset, and memcmp added for System z10 and
diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c
index fb44dcfcf6..fed5ab8982 100644
--- a/sysdeps/x86_64/multiarch/init-arch.c
+++ b/sysdeps/x86_64/multiarch/init-arch.c
@@ -156,6 +156,9 @@ __init_cpu_features (void)
 	  /* Determine if AVX is usable.  */
 	  if (CPUID_AVX)
 	    __cpu_features.feature[index_AVX_Usable] |= bit_AVX_Usable;
+	  /* Determine if FMA is usable.  */
+	  if (CPUID_FMA)
+	    __cpu_features.feature[index_FMA_Usable] |= bit_FMA_Usable;
 	  /* Determine if FMA4 is usable.  */
 	  if (CPUID_FMA4)
 	    __cpu_features.feature[index_FMA4_Usable] |= bit_FMA4_Usable;
diff --git a/sysdeps/x86_64/multiarch/init-arch.h b/sysdeps/x86_64/multiarch/init-arch.h
index 45e2651678..f33f1c81e5 100644
--- a/sysdeps/x86_64/multiarch/init-arch.h
+++ b/sysdeps/x86_64/multiarch/init-arch.h
@@ -22,7 +22,8 @@
 #define bit_Fast_Unaligned_Load		(1 << 4)
 #define bit_Prefer_PMINUB_for_stringop	(1 << 5)
 #define bit_AVX_Usable			(1 << 6)
-#define bit_FMA4_Usable			(1 << 7)
+#define bit_FMA_Usable			(1 << 7)
+#define bit_FMA4_Usable			(1 << 8)
 
 /* CPUID Feature flags.  */
 #define bit_SSE2	(1 << 26)
@@ -56,6 +57,7 @@
 # define index_Fast_Unaligned_Load	FEATURE_INDEX_1*FEATURE_SIZE
 # define index_Prefer_PMINUB_for_stringop FEATURE_INDEX_1*FEATURE_SIZE
 # define index_AVX_Usable		FEATURE_INDEX_1*FEATURE_SIZE
+# define index_FMA_Usable		FEATURE_INDEX_1*FEATURE_SIZE
 # define index_FMA4_Usable		FEATURE_INDEX_1*FEATURE_SIZE
 
 #else	/* __ASSEMBLER__ */
@@ -131,6 +133,8 @@ extern const struct cpu_features *__get_cpu_features (void)
   HAS_CPUID_FLAG (COMMON_CPUID_INDEX_1, ecx, bit_OSXSAVE)
 # define CPUID_AVX \
   HAS_CPUID_FLAG (COMMON_CPUID_INDEX_1, ecx, bit_AVX)
+# define CPUID_FMA \
+  HAS_CPUID_FLAG (COMMON_CPUID_INDEX_1, ecx, bit_FMA)
 # define CPUID_FMA4 \
   HAS_CPUID_FLAG (COMMON_CPUID_INDEX_80000001, ecx, bit_FMA4)
 
@@ -140,7 +144,6 @@ extern const struct cpu_features *__get_cpu_features (void)
 # define HAS_SSSE3	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, bit_SSSE3)
 # define HAS_SSE4_1	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, bit_SSE4_1)
 # define HAS_SSE4_2	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, bit_SSE4_2)
-# define HAS_FMA	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, bit_FMA)
 
 # define index_Fast_Rep_String		FEATURE_INDEX_1
 # define index_Fast_Copy_Backward	FEATURE_INDEX_1
@@ -148,6 +151,7 @@ extern const struct cpu_features *__get_cpu_features (void)
 # define index_Prefer_SSE_for_memop	FEATURE_INDEX_1
 # define index_Fast_Unaligned_Load	FEATURE_INDEX_1
 # define index_AVX_Usable		FEATURE_INDEX_1
+# define index_FMA_Usable		FEATURE_INDEX_1
 # define index_FMA4_Usable		FEATURE_INDEX_1
 
 # define HAS_ARCH_FEATURE(name) \
@@ -159,6 +163,7 @@ extern const struct cpu_features *__get_cpu_features (void)
 # define HAS_PREFER_SSE_FOR_MEMOP	HAS_ARCH_FEATURE (Prefer_SSE_for_memop)
 # define HAS_FAST_UNALIGNED_LOAD	HAS_ARCH_FEATURE (Fast_Unaligned_Load)
 # define HAS_AVX			HAS_ARCH_FEATURE (AVX_Usable)
+# define HAS_FMA			HAS_ARCH_FEATURE (FMA_Usable)
 # define HAS_FMA4			HAS_ARCH_FEATURE (FMA4_Usable)
 
 #endif	/* __ASSEMBLER__ */