diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2017-01-12 18:30:03 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2017-01-12 18:30:03 +0100 |
commit | fbed6f36955aefc4b8735e7f62585fcc3d14f50b (patch) | |
tree | 1cf310a2e4162eb031c2b7701d2a75e8641a9f00 /libgcc | |
parent | a1f009a65fd70df0962e0d5b94aba313520df357 (diff) | |
download | gcc-fbed6f36955aefc4b8735e7f62585fcc3d14f50b.zip gcc-fbed6f36955aefc4b8735e7f62585fcc3d14f50b.tar.gz gcc-fbed6f36955aefc4b8735e7f62585fcc3d14f50b.tar.bz2 |
builtin_target.c (check_features): Check all supported __builtin_cpu_supports options.
* gcc.target/i386/builtin_target.c (check_features): Check all
supported __builtin_cpu_supports options.
From-SVN: r244375
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/config/i386/cpuinfo.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c index 737d1aa..a1dc011 100644 --- a/libgcc/config/i386/cpuinfo.c +++ b/libgcc/config/i386/cpuinfo.c @@ -215,6 +215,9 @@ static void get_available_features (unsigned int ecx, unsigned int edx, int max_cpuid_level) { + unsigned int eax, ebx; + unsigned int ext_level; + unsigned int features = 0; if (edx & bit_CMOV) @@ -247,7 +250,6 @@ get_available_features (unsigned int ecx, unsigned int edx, /* Get Advanced Features at level 7 (eax = 7, ecx = 0). */ if (max_cpuid_level >= 7) { - unsigned int eax, ebx, ecx, edx; __cpuid_count (7, 0, eax, ebx, ecx, edx); if (ebx & bit_BMI) features |= (1 << FEATURE_BMI); @@ -273,20 +275,18 @@ get_available_features (unsigned int ecx, unsigned int edx, features |= (1 << FEATURE_AVX512IFMA); if (ecx & bit_AVX512VBMI) features |= (1 << FEATURE_AVX512VBMI); + if (ecx & bit_AVX512VPOPCNTDQ) + features |= (1 << FEATURE_AVX512VPOPCNTDQ); if (edx & bit_AVX5124VNNIW) features |= (1 << FEATURE_AVX5124VNNIW); if (edx & bit_AVX5124FMAPS) features |= (1 << FEATURE_AVX5124FMAPS); - if (ecx & bit_AVX512VPOPCNTDQ) - features |= (1 << FEATURE_AVX512VPOPCNTDQ); } - unsigned int ext_level; - unsigned int eax, ebx; /* Check cpuid level of extended features. */ __cpuid (0x80000000, ext_level, ebx, ecx, edx); - if (ext_level > 0x80000000) + if (ext_level >= 0x80000001) { __cpuid (0x80000001, eax, ebx, ecx, edx); |