re PR target/66954 (function multiversioning fails for target "aes")
authorUros Bizjak <ubizjak@gmail.com>
Wed, 22 Jul 2015 18:01:33 +0000 (20:01 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 22 Jul 2015 18:01:33 +0000 (20:01 +0200)
libgcc/ChangeLog:

PR target/66954
* config/i386/cpuinfo.c (enum processor_features): Add FEATURE_AES.
(get_available_features): Handle FEATURE_AES.

gcc/ChangeLog:

PR target/66954
* config/i386/i386.c (get_builtin_code_for_version): Add P_AES
to enum feature_priority and feature_list.
(fold_builtin_cpu): Add F_AES to enum processor_features
and isa_names_table.

gcc/testsuite/ChangeLog:

PR target/66954
* g++.dg/ext/mv24.C: New test.

From-SVN: r226081

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/mv24.C [new file with mode: 0644]
libgcc/ChangeLog
libgcc/config/i386/cpuinfo.c

index cf4ecd76b6591f89583e17ebe4f831779553b3fe..8d22ffc7aed9b7bf984287b5fb438d9a97b21d6e 100644 (file)
@@ -1,3 +1,11 @@
+2015-07-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66954
+       * config/i386/i386.c (get_builtin_code_for_version): Add P_AES
+       to enum feature_priority and feature_list.
+       (fold_builtin_cpu): Add F_AES to enum processor_features
+       and isa_names_table.
+
 2015-07-22  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
        PR driver/66737
index b10569ac129411448bf3c255cdb0ef5e91138fa1..c9dbe475d7904cd25d6fe5e73c4d553027c32298 100644 (file)
@@ -34611,6 +34611,7 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
     P_SSE4_2,
     P_PROC_SSE4_2,
     P_POPCNT,
+    P_AES,
     P_AVX,
     P_PROC_AVX,
     P_BMI,
@@ -34627,7 +34628,7 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
     P_PROC_AVX512F
   };
 
- enum feature_priority priority = P_ZERO;
 enum feature_priority priority = P_ZERO;
 
   /* These are the target attribute strings for which a dispatcher is
      available, from fold_builtin_cpu.  */
@@ -34648,6 +34649,7 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
       {"sse4.1", P_SSE4_1},
       {"sse4.2", P_SSE4_2},
       {"popcnt", P_POPCNT},
+      {"aes", P_AES},
       {"avx", P_AVX},
       {"bmi", P_BMI},
       {"fma4", P_FMA4},
@@ -35635,6 +35637,7 @@ fold_builtin_cpu (tree fndecl, tree *args)
     F_AVX512F,
     F_BMI,
     F_BMI2,
+    F_AES,
     F_MAX
   };
 
@@ -35730,7 +35733,8 @@ fold_builtin_cpu (tree fndecl, tree *args)
       {"avx2",   F_AVX2},
       {"avx512f",F_AVX512F},
       {"bmi",    F_BMI},
-      {"bmi2",   F_BMI2}
+      {"bmi2",   F_BMI2},
+      {"aes",    F_AES}
     };
 
   tree __processor_model_type = build_processor_model_struct ();
index 8bde72f7dc25af8a626f057fdc2b80660b322cdf..f457b27fe6ad272f6830a73f98006046030b0fd8 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66954
+       * g++.dg/ext/mv24.C: New test.
+
 2015-07-22  Marek Polacek  <polacek@redhat.com>
 
        * gcc.dg/vmx/unpack.c: Use dg-additional-options rather than
diff --git a/gcc/testsuite/g++.dg/ext/mv24.C b/gcc/testsuite/g++.dg/ext/mv24.C
new file mode 100644 (file)
index 0000000..58292a8
--- /dev/null
@@ -0,0 +1,35 @@
+// Test case to check if Multiversioning works for AES
+
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-ifunc "" }
+// { dg-options "-O2" }
+
+#include <assert.h>
+
+// Check if AES feature selection works
+int foo () __attribute__((target("default")));
+int foo () __attribute__((target("aes")));
+
+int main ()
+{
+  int val = foo ();
+
+  if (__builtin_cpu_supports ("aes"))
+    assert (val == 1);
+  else
+    assert (val == 0);
+
+  return 0;
+}
+
+int __attribute__ ((target("default")))
+foo ()
+{
+  return 0;
+}
+
+int __attribute__ ((target("aes")))
+foo ()
+{
+  return 1;
+}
index 810c6af88da7e0deb9a7dfd4ae810bef7df0d86f..79df4624e5de4b1702a8edabd37c159ae2490d34 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66954
+       * config/i386/cpuinfo.c (enum processor_features): Add FEATURE_AES.
+       (get_available_features): Handle FEATURE_AES.
+
 2015-07-22  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * config/nios2/linux-atomic.c (<asm/unistd.h>): Remove #include.
index f6f91ddce6a3704097cd0a0b3b4ebc52b0a8abab..01dbb59584361ed0c42ceb48ecdfb9041edcc93f 100644 (file)
@@ -100,7 +100,8 @@ enum processor_features
   FEATURE_FMA,
   FEATURE_AVX512F,
   FEATURE_BMI,
-  FEATURE_BMI2
+  FEATURE_BMI2,
+  FEATURE_AES
 };
 
 struct __processor_model
@@ -273,6 +274,8 @@ get_available_features (unsigned int ecx, unsigned int edx,
     features |= (1 << FEATURE_SSE2);
   if (ecx & bit_POPCNT)
     features |= (1 << FEATURE_POPCNT);
+  if (ecx & bit_AES)
+    features |= (1 << FEATURE_AES);
   if (ecx & bit_SSE3)
     features |= (1 << FEATURE_SSE3);
   if (ecx & bit_SSSE3)