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 master updated. glibc-2.24-277-gb3d17c1


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, master has been updated
       via  b3d17c1cf29ac8cd6b2fcd1db7d824e4af9ea505 (commit)
      from  6f322a894704e7959b9cee7c2cc7ec1963a26e73 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b3d17c1cf29ac8cd6b2fcd1db7d824e4af9ea505

commit b3d17c1cf29ac8cd6b2fcd1db7d824e4af9ea505
Author: Carlos O'Donell <carlos@systemhalted.org>
Date:   Mon Oct 17 19:35:34 2016 -0400

    Bug 20689: Fix FMA and AVX2 detection on Intel
    
    In the Intel Architecture Instruction Set Extensions Programming
    reference the recommended way to test for FMA in section
    '2.2.1 Detection of FMA' is:
    
    "Application Software must identify that hardware supports AVX as
    explained in ... after that it must also detect support for FMA..."
    
    We don't do that in glibc. We use osxsave to detect the use of xgetbv,
    and after that we check for AVX and FMA orthogonally. It is conceivable
    that you could have the AVX bit clear and the FMA bit in an undefined
    state.
    
    This commit fixes FMA and AVX2 detection to depend on usable AVX
    as required by the recommended Intel sequences.
    
    v1: https://www.sourceware.org/ml/libc-alpha/2016-10/msg00241.html
    v2: https://www.sourceware.org/ml/libc-alpha/2016-10/msg00265.html

diff --git a/ChangeLog b/ChangeLog
index 5448fad..11ee620 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-10-17  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #20689]
+	* sysdeps/x86/cpu-features.c: Only enable FMA and AVX2 if AVX is
+	usable.
+
 2016-10-17  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/generic/nan-high-order-bit.h: New file.
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
index 11b9af2..e228a76 100644
--- a/sysdeps/x86/cpu-features.c
+++ b/sysdeps/x86/cpu-features.c
@@ -60,12 +60,20 @@ get_common_indeces (struct cpu_features *cpu_features,
 	{
 	  /* Determine if AVX is usable.  */
 	  if (CPU_FEATURES_CPU_P (cpu_features, AVX))
-	    cpu_features->feature[index_arch_AVX_Usable]
-	      |= bit_arch_AVX_Usable;
-	  /* Determine if AVX2 is usable.  */
-	  if (CPU_FEATURES_CPU_P (cpu_features, AVX2))
-	    cpu_features->feature[index_arch_AVX2_Usable]
-	      |= bit_arch_AVX2_Usable;
+	    {
+	      cpu_features->feature[index_arch_AVX_Usable]
+		|= bit_arch_AVX_Usable;
+	      /* The following features depend on AVX being usable.  */
+	      /* Determine if AVX2 is usable.  */
+	      if (CPU_FEATURES_CPU_P (cpu_features, AVX2))
+		cpu_features->feature[index_arch_AVX2_Usable]
+		  |= bit_arch_AVX2_Usable;
+	      /* Determine if FMA is usable.  */
+	      if (CPU_FEATURES_CPU_P (cpu_features, FMA))
+		cpu_features->feature[index_arch_FMA_Usable]
+		  |= bit_arch_FMA_Usable;
+	    }
+
 	  /* Check if OPMASK state, upper 256-bit of ZMM0-ZMM15 and
 	     ZMM16-ZMM31 state are enabled.  */
 	  if ((xcrlow & (bit_Opmask_state | bit_ZMM0_15_state
@@ -83,10 +91,6 @@ get_common_indeces (struct cpu_features *cpu_features,
 		      |= bit_arch_AVX512DQ_Usable;
 		}
 	    }
-	  /* Determine if FMA is usable.  */
-	  if (CPU_FEATURES_CPU_P (cpu_features, FMA))
-	    cpu_features->feature[index_arch_FMA_Usable]
-	      |= bit_arch_FMA_Usable;
 	}
     }
 }

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

Summary of changes:
 ChangeLog                  |    6 ++++++
 sysdeps/x86/cpu-features.c |   24 ++++++++++++++----------
 2 files changed, 20 insertions(+), 10 deletions(-)


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]