Hi Uroš, On 06 Oct 17:15, Uros Bizjak wrote: > On Tue, Oct 6, 2015 at 3:36 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote: > > Hello, > > Patch in the bottom adds missing options to libgcc/config/i386/cpuinfo.c > > It also updates documentation. > > As far as number of entries exceeded 32, I've extended > > type of features array to INT64 (most suspicious part of the patch). > > > > Bootstrapped and regtested. `make pdf' seems to be working properly. > > > > Comments? > > Er, this is on purpose. Multiversioning is intended to depend on ISA > extensions such as SSE, AVX, AES to some degree, and similar > extensions that do make a difference when used in compilation. This > was discussed some years ago, but I can't find the URL of the > discussion. > > So, from the list below, I'd take only SHA. Plus fixes/additions in > the documentation and testsuite, of course. Okay, got it. Updated patch in the bottom.
Bootstrapped and regtested. Is it ok for trunk? commit dd26e736491473793bbb2da3d5922835dc3ad181 Author: Kirill Yukhin <kirill.yuk...@intel.com> Date: Wed Oct 7 08:42:10 2015 +0300 Add SHA to cpuinfo. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d59b59b..44060cf 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -36587,6 +36587,7 @@ fold_builtin_cpu (tree fndecl, tree *args) F_AVX512PF, F_AVX512VBMI, F_AVX512IFMA, + F_SHA, F_MAX }; @@ -36697,6 +36698,7 @@ fold_builtin_cpu (tree fndecl, tree *args) {"avx512pf",F_AVX512PF}, {"avx512vbmi",F_AVX512VBMI}, {"avx512ifma",F_AVX512IFMA}, + {"sha", F_SHA}, }; tree __processor_model_type = build_processor_model_struct (); diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 2db7bb2..869a491 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -16894,6 +16894,21 @@ Intel Core i7 Westmere CPU. @item sandybridge Intel Core i7 Sandy Bridge CPU. +@item ivybridge +Intel Core i7 Ivy Bridge CPU. + +@item haswell +Intel Core i7 Haswell CPU. + +@item broadwell +Intel Core i7 Broadwell CPU. + +@item skylake +Intel Core i7 Skylake CPU. + +@item skylake-avx512 +Intel Core i7 Skylake CPU with AVX-512 extensions. + @item amd AMD CPU. @@ -16974,6 +16989,8 @@ AVX instructions. AVX2 instructions. @item avx512f AVX512F instructions. +@item sha +SHA instructions. @end table Here is an example: diff --git a/gcc/testsuite/gcc.target/i386/builtin_target.c b/gcc/testsuite/gcc.target/i386/builtin_target.c index dd31108..1da0e96 100644 --- a/gcc/testsuite/gcc.target/i386/builtin_target.c +++ b/gcc/testsuite/gcc.target/i386/builtin_target.c @@ -213,6 +213,8 @@ check_features (unsigned int ecx, unsigned int edx, assert (__builtin_cpu_supports ("avx512ifma")); if (ecx & bit_AVX512VBMI) assert (__builtin_cpu_supports ("avx512vbmi")); + if (ebx & bit_SHA) + assert (__builtin_cpu_supports ("sha")); } } diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c index 0cbbc85..62cdbe8 100644 --- a/libgcc/config/i386/cpuinfo.c +++ b/libgcc/config/i386/cpuinfo.c @@ -113,7 +113,8 @@ enum processor_features FEATURE_AVX512ER, FEATURE_AVX512PF, FEATURE_AVX512VBMI, - FEATURE_AVX512IFMA + FEATURE_AVX512IFMA, + FEATURE_SHA }; struct __processor_model @@ -348,6 +349,8 @@ get_available_features (unsigned int ecx, unsigned int edx, features |= (1 << FEATURE_AVX512IFMA); if (ecx & bit_AVX512VBMI) features |= (1 << FEATURE_AVX512VBMI); + if (ebx & bit_SHA) + features |= (1 << FEATURE_SHA); } unsigned int ext_level;