summarylogtreecommitdiffstats
path: root/glibc-2.16-detect-fma.patch
diff options
context:
space:
mode:
Diffstat (limited to 'glibc-2.16-detect-fma.patch')
-rw-r--r--glibc-2.16-detect-fma.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/glibc-2.16-detect-fma.patch b/glibc-2.16-detect-fma.patch
new file mode 100644
index 000000000000..daffb976871a
--- /dev/null
+++ b/glibc-2.16-detect-fma.patch
@@ -0,0 +1,72 @@
+diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c
+index fb44dcf..fed5ab8 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 45e2651..f33f1c8 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__ */
+--
+1.7.3.4
+