Fix feature check for HRESET/AVX_VNNI/UINTR
authorHongyu <hongyu.wang@intel.com>
Wed, 9 Dec 2020 19:18:41 +0000 (19:18 +0000)
committerliuhongt <hongtao.liu@intel.com>
Fri, 11 Dec 2020 06:07:52 +0000 (14:07 +0800)
gcc/ChangeLog:
* common/config/i386/cpuinfo.h (get_available_features):
Move check for HRESET/AVX_VNNI/UINTR out of avx512_usable.

gcc/common/config/i386/cpuinfo.h

index 4f1ab6368074773608740169cccb089bf9e77051..a3372fc4ecf9d0b10caa80e762a7582001b1f264 100644 (file)
@@ -669,6 +669,8 @@ get_available_features (struct __processor_model *cpu_model,
        set_feature (FEATURE_WAITPKG);
       if (ecx & bit_SHSTK)
        set_feature (FEATURE_SHSTK);
+      if (ecx & bit_KL)
+       has_kl = 1;
       if (edx & bit_SERIALIZE)
        set_feature (FEATURE_SERIALIZE);
       if (edx & bit_TSXLDTRK)
@@ -677,6 +679,8 @@ get_available_features (struct __processor_model *cpu_model,
        set_feature (FEATURE_PCONFIG);
       if (edx & bit_IBT)
        set_feature (FEATURE_IBT);
+      if (edx & bit_UINTR)
+       set_feature (FEATURE_UINTR);
       if (amx_usable)
        {
          if (edx & bit_AMX_TILE)
@@ -686,8 +690,6 @@ get_available_features (struct __processor_model *cpu_model,
          if (edx & bit_AMX_BF16)
            set_feature (FEATURE_AMX_BF16);
        }
-      if (ecx & bit_KL)
-       has_kl = 1;
       if (avx512_usable)
        {
          if (ebx & bit_AVX512F)
@@ -722,17 +724,20 @@ get_available_features (struct __processor_model *cpu_model,
            set_feature (FEATURE_AVX5124FMAPS);
          if (edx & bit_AVX512VP2INTERSECT)
            set_feature (FEATURE_AVX512VP2INTERSECT);
-         if (edx & bit_UINTR)
-           set_feature (FEATURE_UINTR);
+       }
 
-         __cpuid_count (7, 1, eax, ebx, ecx, edx);
-         if (eax & bit_AVX512BF16)
-           set_feature (FEATURE_AVX512BF16);
-         if (eax & bit_HRESET)
-           set_feature (FEATURE_HRESET);
+      __cpuid_count (7, 1, eax, ebx, ecx, edx);
+      if (eax & bit_HRESET)
+       set_feature (FEATURE_HRESET);
+      if (avx_usable)
+       {
          if (eax & bit_AVXVNNI)
            set_feature (FEATURE_AVXVNNI);
-
+       }
+      if (avx512_usable)
+       {
+         if (eax & bit_AVX512BF16)
+           set_feature (FEATURE_AVX512BF16);
        }
     }