summaryrefslogtreecommitdiffstats
path: root/patches/source/glibc/glibc-2.15_avx1.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/source/glibc/glibc-2.15_avx1.diff')
-rw-r--r--patches/source/glibc/glibc-2.15_avx1.diff54
1 files changed, 54 insertions, 0 deletions
diff --git a/patches/source/glibc/glibc-2.15_avx1.diff b/patches/source/glibc/glibc-2.15_avx1.diff
new file mode 100644
index 000000000..d0616de0e
--- /dev/null
+++ b/patches/source/glibc/glibc-2.15_avx1.diff
@@ -0,0 +1,54 @@
+From: Ulrich Drepper <drepper@gmail.com>
+Date: Thu, 26 Jan 2012 12:45:14 +0000 (-0500)
+Subject: Reset bit_AVX in __cpu_features is OS support is missing
+X-Git-Tag: glibc-2.16-tps~1053
+X-Git-Url: http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=afc5ed09cbce5d6fd48b3a8c5ec427b31f996880
+
+Reset bit_AVX in __cpu_features is OS support is missing
+
+--- sysdeps/x86_64/multiarch/init-arch.c
++++ sysdeps/x86_64/multiarch/init-arch.c
+@@ -1,6 +1,6 @@
+ /* Initialize CPU feature data.
+ This file is part of the GNU C Library.
+- Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@redhat.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -144,6 +144,18 @@ __init_cpu_features (void)
+ else
+ kind = arch_kind_other;
+
++ if (__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & bit_AVX)
++ {
++ /* Reset the AVX bit in case OSXSAVE is disabled. */
++ if ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & bit_OSXSAVE) == 0
++ || ({ unsigned int xcrlow;
++ unsigned int xcrhigh;
++ asm ("xgetbv"
++ : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0));
++ (xcrlow & 6) != 6; }))
++ __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx &= ~bit_AVX;
++ }
++
+ __cpu_features.family = family;
+ __cpu_features.model = model;
+ atomic_write_barrier ();
+--- sysdeps/x86_64/multiarch/init-arch.h
++++ sysdeps/x86_64/multiarch/init-arch.h
+@@ -1,5 +1,5 @@
+ /* This file is part of the GNU C Library.
+- Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -27,6 +27,7 @@
+ #define bit_SSSE3 (1 << 9)
+ #define bit_SSE4_1 (1 << 19)
+ #define bit_SSE4_2 (1 << 20)
++#define bit_OSXSAVE (1 << 27)
+ #define bit_AVX (1 << 28)
+ #define bit_POPCOUNT (1 << 23)
+ #define bit_FMA (1 << 12)