aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2017-01-12 18:30:03 +0100
committerUros Bizjak <uros@gcc.gnu.org>2017-01-12 18:30:03 +0100
commitfbed6f36955aefc4b8735e7f62585fcc3d14f50b (patch)
tree1cf310a2e4162eb031c2b7701d2a75e8641a9f00 /libgcc
parenta1f009a65fd70df0962e0d5b94aba313520df357 (diff)
downloadgcc-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.c12
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);