Hello, Patch in the bottom adds missing AVX-512VBMI,IFMA features to libgcc/config/i386/cpuinfo.c and, built-in expansion and test.
Comitted to main trunk as obvious. gcc/ * config/i386/i386.c (processor_features): Add F_AVX512VBMI, F_AVX512IFMA. (isa_names_table): Handle F_AVX512VBMI and F_AVX512IFMA. libgcc/ * config/i386/cpuinfo.c (processor_features): Add FEATURE_AVX512VBMI and FEATURE_AVX512VBMI. testsuite/ * gcc.target/i386/builtin_target.c: Handle "avx512ifma" and "avx512vbmi". -- Thanks, K commit 39d9d882ed654e8b40095a24cb05baf661b81f3f Author: Kirill Yukhin <kirill.yuk...@intel.com> Date: Fri Oct 2 18:08:33 2015 +0300 AVX-512. Add missing features to cpuinfo.c diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1ccc33e..1719175 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -36591,6 +36591,8 @@ fold_builtin_cpu (tree fndecl, tree *args) F_AVX512CD, F_AVX512ER, F_AVX512PF, + F_AVX512VBMI, + F_AVX512IFMA, F_MAX }; @@ -36699,6 +36701,8 @@ fold_builtin_cpu (tree fndecl, tree *args) {"avx512cd",F_AVX512CD}, {"avx512er",F_AVX512ER}, {"avx512pf",F_AVX512PF}, + {"avx512vbmi",F_AVX512VBMI}, + {"avx512ifma",F_AVX512IFMA}, }; tree __processor_model_type = build_processor_model_struct (); diff --git a/gcc/testsuite/gcc.target/i386/builtin_target.c b/gcc/testsuite/gcc.target/i386/builtin_target.c index aff4559..a9a8753 100644 --- a/gcc/testsuite/gcc.target/i386/builtin_target.c +++ b/gcc/testsuite/gcc.target/i386/builtin_target.c @@ -200,6 +200,10 @@ check_features (unsigned int ecx, unsigned int edx, assert (__builtin_cpu_supports ("avx512bw")); if (ebx & bit_AVX512DQ) assert (__builtin_cpu_supports ("avx512dq")); + if (ebx & bit_AVX512IFMA) + assert (__builtin_cpu_supports ("avx512ifma")); + if (ebx & bit_AVX512VBMI) + assert (__builtin_cpu_supports ("avx512vbmi")); } } diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c index ddb49e3..40ed84c 100644 --- a/libgcc/config/i386/cpuinfo.c +++ b/libgcc/config/i386/cpuinfo.c @@ -110,7 +110,9 @@ enum processor_features FEATURE_AVX512DQ, FEATURE_AVX512CD, FEATURE_AVX512ER, - FEATURE_AVX512PF + FEATURE_AVX512PF, + FEATURE_AVX512VBMI, + FEATURE_AVX512IFMA }; struct __processor_model @@ -336,6 +338,10 @@ get_available_features (unsigned int ecx, unsigned int edx, features |= (1 << FEATURE_AVX512PF); if (ebx & bit_AVX512ER) features |= (1 << FEATURE_AVX512ER); + if (ebx & bit_AVX512IFMA) + features |= (1 << FEATURE_AVX512IFMA); + if (ecx & bit_AVX512VBMI) + features |= (1 << FEATURE_AVX512VBMI); } unsigned int ext_level;