shithub: libvpx

Download patch

ref: 062a43acb6b474e2663b3e639ef251ca9f3b360f
parent: 454877d8748fdbaa3d4e9bcd4994355d50dd6c6d
parent: 602d25ec4344f96031ce1043c15490e79438c1bc
author: Johann Koenig <johannkoenig@google.com>
date: Mon Oct 21 14:24:31 EDT 2019

Merge "Fix AVX-512 capability detection"

--- a/vpx_ports/x86.h
+++ b/vpx_ports/x86.h
@@ -202,6 +202,7 @@
 
   // bits 27 (OSXSAVE) & 28 (256-bit AVX)
   if ((reg_ecx & (BIT(27) | BIT(28))) == (BIT(27) | BIT(28))) {
+    // Check for OS-support of YMM state. Necessary for AVX and AVX2.
     if ((xgetbv() & 0x6) == 0x6) {
       flags |= HAS_AVX;
 
@@ -214,8 +215,10 @@
         // bits 16 (AVX-512F) & 17 (AVX-512DQ) & 28 (AVX-512CD) &
         // 30 (AVX-512BW) & 32 (AVX-512VL)
         if ((reg_ebx & (BIT(16) | BIT(17) | BIT(28) | BIT(30) | BIT(31))) ==
-            (BIT(16) | BIT(17) | BIT(28) | BIT(30) | BIT(31)))
-          flags |= HAS_AVX512;
+            (BIT(16) | BIT(17) | BIT(28) | BIT(30) | BIT(31))) {
+          // Check for OS-support of ZMM and YMM state. Necessary for AVX-512.
+          if ((xgetbv() & 0xe6) == 0xe6) flags |= HAS_AVX512;
+        }
       }
     }
   }