diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-12 17:30:03 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-12 17:30:03 +0000 |
commit | 72dcb178d263096fec4e44fafacb3a308857daae (patch) | |
tree | 1cf310a2e4162eb031c2b7701d2a75e8641a9f00 /libgcc/config | |
parent | dc2c1d0df4218c82017514b36785d3d48195648f (diff) |
* gcc.target/i386/builtin_target.c (check_features): Check all
supported __builtin_cpu_supports options.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244375 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc/config')
-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 737d1aa14bd..a1dc011525f 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); |