aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <sandfeld@kde.org>2015-01-25 18:17:46 +0000
committerUros Bizjak <uros@gcc.gnu.org>2015-01-25 19:17:46 +0100
commit939911c558653f1514f1280c67f04b4bae0297c8 (patch)
tree3c8bca97d45d736dc6840d8b8fed8493f6285dc3 /libgcc
parent5eb1643c2c252821621580cc1a5aeb42516926f0 (diff)
downloadgcc-939911c558653f1514f1280c67f04b4bae0297c8.zip
gcc-939911c558653f1514f1280c67f04b4bae0297c8.tar.gz
gcc-939911c558653f1514f1280c67f04b4bae0297c8.tar.bz2
i386.c (get_builtin_code_for_version): Add support for BMI and BMI2 multiversion functions.
gcc/ChangeLog: * config/i386/i386.c (get_builtin_code_for_version): Add support for BMI and BMI2 multiversion functions. (fold_builtin_cpu): Add F_BMI and F_BMI2. libgcc/ChangeLog: * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_BMI and FEATURE_BMI2. (get_available_features): Detect FEATURE_BMI and FEATURE_BMI2. testsuite/ChangeLog: * gcc.target/i386/funcspec-5.c: Test new multiversion targets. * g++.dg/ext/mv17.C: Test BMI/BMI2 multiversion dispatcher. Co-Authored-By: Uros Bizjak <ubizjak@gmail.com> From-SVN: r220095
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog6
-rw-r--r--libgcc/config/i386/cpuinfo.c8
2 files changed, 13 insertions, 1 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 3949c0a..be24ed4 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-25 Allan Sandfeld Jensen <sandfeld@kde.org>
+
+ * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_BMI and
+ FEATURE_BMI2.
+ (get_available_features): Detect FEATURE_BMI and FEATURE_BMI2.
+
2015-01-24 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/cpuinfo.c (processor_subtypes): Add
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
index c80083e..eaf2f10 100644
--- a/libgcc/config/i386/cpuinfo.c
+++ b/libgcc/config/i386/cpuinfo.c
@@ -98,7 +98,9 @@ enum processor_features
FEATURE_FMA4,
FEATURE_XOP,
FEATURE_FMA,
- FEATURE_AVX512F
+ FEATURE_AVX512F,
+ FEATURE_BMI,
+ FEATURE_BMI2
};
struct __processor_model
@@ -289,8 +291,12 @@ get_available_features (unsigned int ecx, unsigned int edx,
{
unsigned int eax, ebx, ecx, edx;
__cpuid_count (7, 0, eax, ebx, ecx, edx);
+ if (ebx & bit_BMI)
+ features |= (1 << FEATURE_BMI);
if (ebx & bit_AVX2)
features |= (1 << FEATURE_AVX2);
+ if (ebx & bit_BMI2)
+ features |= (1 << FEATURE_BMI2);
if (ebx & bit_AVX512F)
features |= (1 << FEATURE_AVX512F);
}