aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/mv25.C35
-rw-r--r--libgcc/ChangeLog6
-rw-r--r--libgcc/config/i386/cpuinfo.c5
6 files changed, 63 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7e31110..8db5376 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-08-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/66954
+ * config/i386/i386.c (get_builtin_code_for_version): Add P_PCLMUL
+ to enum feature_priority and feature_list.
+ (fold_builtin_cpu): Add F_PCLMUL to enum processor_features
+ and isa_names_table.
+
2015-08-11 Yuri Rumyantsev <ysrumyan@gmail.com>
* tree-vect-stmts.c (vectorizable_shift): Add missed test on
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 57d874b..caec218 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -34574,6 +34574,7 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
P_PROC_SSE4_2,
P_POPCNT,
P_AES,
+ P_PCLMUL,
P_AVX,
P_PROC_AVX,
P_BMI,
@@ -34612,6 +34613,7 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
{"sse4.2", P_SSE4_2},
{"popcnt", P_POPCNT},
{"aes", P_AES},
+ {"pclmul", P_PCLMUL},
{"avx", P_AVX},
{"bmi", P_BMI},
{"fma4", P_FMA4},
@@ -35600,6 +35602,7 @@ fold_builtin_cpu (tree fndecl, tree *args)
F_BMI,
F_BMI2,
F_AES,
+ F_PCLMUL,
F_MAX
};
@@ -35696,7 +35699,8 @@ fold_builtin_cpu (tree fndecl, tree *args)
{"avx512f",F_AVX512F},
{"bmi", F_BMI},
{"bmi2", F_BMI2},
- {"aes", F_AES}
+ {"aes", F_AES},
+ {"pclmul", F_PCLMUL}
};
tree __processor_model_type = build_processor_model_struct ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 93cacfb..5c970e7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/66954
+ * g++.dg/ext/mv25.C: New test.
+
2015-08-11 Yuri Rumyantsev <ysrumyan@gmail.com>
* gcc.target/i386/avx2-vect-shift.c: New test.
diff --git a/gcc/testsuite/g++.dg/ext/mv25.C b/gcc/testsuite/g++.dg/ext/mv25.C
new file mode 100644
index 0000000..fd40eca
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/mv25.C
@@ -0,0 +1,35 @@
+// Test case to check if Multiversioning works for PCLMUL
+
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-ifunc "" }
+// { dg-options "-O2" }
+
+#include <assert.h>
+
+// Check if PCLMUL feature selection works
+int foo () __attribute__((target("default")));
+int foo () __attribute__((target("pclmul")));
+
+int main ()
+{
+ int val = foo ();
+
+ if (__builtin_cpu_supports ("pclmul"))
+ assert (val == 1);
+ else
+ assert (val == 0);
+
+ return 0;
+}
+
+int __attribute__ ((target("default")))
+foo ()
+{
+ return 0;
+}
+
+int __attribute__ ((target("pclmul")))
+foo ()
+{
+ return 1;
+}
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 95a10f2..062bbe9 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/66954
+ * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_PCLMUL.
+ (get_available_features): Handle FEATURE_PCLMUL.
+
2015-08-10 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/cpuinfo.c (get_intel_cpu): Treat model == 0x4f as
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
index 57711d0..25d85e4 100644
--- a/libgcc/config/i386/cpuinfo.c
+++ b/libgcc/config/i386/cpuinfo.c
@@ -101,7 +101,8 @@ enum processor_features
FEATURE_AVX512F,
FEATURE_BMI,
FEATURE_BMI2,
- FEATURE_AES
+ FEATURE_AES,
+ FEATURE_PCLMUL
};
struct __processor_model
@@ -277,6 +278,8 @@ get_available_features (unsigned int ecx, unsigned int edx,
features |= (1 << FEATURE_POPCNT);
if (ecx & bit_AES)
features |= (1 << FEATURE_AES);
+ if (ecx & bit_PCLMUL)
+ features |= (1 << FEATURE_PCLMUL);
if (ecx & bit_SSE3)
features |= (1 << FEATURE_SSE3);
if (ecx & bit_SSSE3)