]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/60847 (x86 BMI intrinsics not recognized)
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Apr 2014 10:02:36 +0000 (12:02 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Apr 2014 10:02:36 +0000 (12:02 +0200)
PR target/60847
Forward port from 4.8 branch
2013-07-19  Kirill Yukhin  <kirill.yukhin@intel.com>

* config/i386/bmiintrin.h (_blsi_u32): New.
(_blsi_u64): Ditto.
(_blsr_u32): Ditto.
(_blsr_u64): Ditto.
(_blsmsk_u32): Ditto.
(_blsmsk_u64): Ditto.
(_tzcnt_u32): Ditto.
(_tzcnt_u64): Ditto.

* gcc.target/i386/bmi-1.c: Extend with new instrinsics.
Fix scan patterns.
* gcc.target/i386/bmi-2.c: Ditto.

From-SVN: r209471

gcc/ChangeLog
gcc/config/i386/bmiintrin.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/bmi-1.c
gcc/testsuite/gcc.target/i386/bmi-2.c

index 68fc4a7bd15609773e296253e3e7a4f73b95fc92..2a00a71d06dd6a98826d5b8033dd8ba62cc13370 100644 (file)
@@ -1,3 +1,18 @@
+2014-04-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/60847
+       Forward port from 4.8 branch
+       2013-07-19  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       * config/i386/bmiintrin.h (_blsi_u32): New.
+       (_blsi_u64): Ditto.
+       (_blsr_u32): Ditto.
+       (_blsr_u64): Ditto.
+       (_blsmsk_u32): Ditto.
+       (_blsmsk_u64): Ditto.
+       (_tzcnt_u32): Ditto.
+       (_tzcnt_u64): Ditto.
+
 2014-04-17  Kito Cheng  <kito@0xlab.org>
 
        * gcc.c (used_arg): Prevent out of bound access for multilib_options.
index b86adf179cfb8de6ab3bc49647ffb92a60299dac..b2d7c60eaf801b49ab7a31617f062dd6a00df213 100644 (file)
@@ -40,7 +40,6 @@ __tzcnt_u16 (unsigned short __X)
   return __builtin_ctzs (__X);
 }
 
-
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __andn_u32 (unsigned int __X, unsigned int __Y)
 {
@@ -65,18 +64,35 @@ __blsi_u32 (unsigned int __X)
   return __X & -__X;
 }
 
+extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsi_u32 (unsigned int __X)
+{
+  return __blsi_u32 (__X);
+}
+
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __blsmsk_u32 (unsigned int __X)
 {
   return __X ^ (__X - 1);
 }
 
+extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsmsk_u32 (unsigned int __X)
+{
+  return __blsmsk_u32 (__X);
+}
+
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __blsr_u32 (unsigned int __X)
 {
   return __X & (__X - 1);
 }
 
+extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsr_u32 (unsigned int __X)
+{
+  return __blsr_u32 (__X);
+}
 
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __tzcnt_u32 (unsigned int __X)
@@ -84,6 +100,12 @@ __tzcnt_u32 (unsigned int __X)
   return __builtin_ctz (__X);
 }
 
+extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tzcnt_u32 (unsigned int __X)
+{
+  return __builtin_ctz (__X);
+}
+
 
 #ifdef  __x86_64__
 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -110,24 +132,48 @@ __blsi_u64 (unsigned long long __X)
   return __X & -__X;
 }
 
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsi_u64 (unsigned long long __X)
+{
+  return __blsi_u64 (__X);
+}
+
 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __blsmsk_u64 (unsigned long long __X)
 {
   return __X ^ (__X - 1);
 }
 
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsmsk_u64 (unsigned long long __X)
+{
+  return __blsmsk_u64 (__X);
+}
+
 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __blsr_u64 (unsigned long long __X)
 {
   return __X & (__X - 1);
 }
 
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_blsr_u64 (unsigned long long __X)
+{
+  return __blsr_u64 (__X);
+}
+
 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __tzcnt_u64 (unsigned long long __X)
 {
   return __builtin_ctzll (__X);
 }
 
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tzcnt_u64 (unsigned long long __X)
+{
+  return __builtin_ctzll (__X);
+}
+
 #endif /* __x86_64__  */
 
 #ifdef __DISABLE_BMI__
index 67f8eef9c81df219cd2139098a17c05878cbd79a..d27064c78ad76be1c728decdd837281bff9e5c9e 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/60847
+       Forward port from 4.8 branch
+       2013-07-19  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       * gcc.target/i386/bmi-1.c: Extend with new instrinsics.
+       Fix scan patterns.
+       * gcc.target/i386/bmi-2.c: Ditto.
+
 2014-04-17  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/60849
index a05cb275adc0086ff468c75f07cce29aed0c6977..c66a9d83b297e4c109bd21f8d9d29c929105bedb 100644 (file)
@@ -2,10 +2,10 @@
 /* { dg-options "-O2 -mbmi " } */
 /* { dg-final { scan-assembler "andn\[^\\n]*eax" } } */
 /* { dg-final { scan-assembler-times "bextr\[ \\t]+\[^\\n]*eax" 2 } } */
-/* { dg-final { scan-assembler "blsi\[^\\n]*eax" } } */
-/* { dg-final { scan-assembler "blsmsk\[^\\n]*eax" } } */
-/* { dg-final { scan-assembler "blsr\[^\\n]*eax" } } */
-/* { dg-final { scan-assembler "tzcntl\[^\\n]*eax" } } */
+/* { dg-final { scan-assembler-times "blsi\[^\\n]*eax" 2 } } */
+/* { dg-final { scan-assembler-times "blsmsk\[^\\n]*eax" 2 } } */
+/* { dg-final { scan-assembler-times "blsr\[^\\n]*eax" 2 } } */
+/* { dg-final { scan-assembler-times "tzcntl\[^\\n]*eax" 2 } } */
 
 #include <x86intrin.h>
 
@@ -35,20 +35,44 @@ func_blsi32 (unsigned int X)
   return __blsi_u32(X);
 }
 
+unsigned int
+func_blsi32_2 (unsigned int X)
+{
+  return _blsi_u32(X);
+}
+
 unsigned int
 func_blsmsk32 (unsigned int X)
 {
   return __blsmsk_u32(X);
 }
 
+unsigned int
+func_blsmsk32_2 (unsigned int X)
+{
+  return _blsmsk_u32(X);
+}
+
 unsigned int
 func_blsr32 (unsigned int X)
 {
   return __blsr_u32(X);
 }
 
+unsigned int
+func_blsr32_2 (unsigned int X)
+{
+  return _blsr_u32(X);
+}
+
 unsigned int
 func_tzcnt32 (unsigned int X)
 {
   return __tzcnt_u32(X);
 }
+
+unsigned int
+func_tzcnt32_2 (unsigned int X)
+{
+  return _tzcnt_u32(X);
+}
index 68d06a20540fba77c5d321ca7d82217bf3a96739..6eea66aa0f670f9c0b7c808bc639b208c363b407 100644 (file)
@@ -2,10 +2,10 @@
 /* { dg-options "-O2 -mbmi " } */
 /* { dg-final { scan-assembler "andn\[^\\n]*rax" } } */
 /* { dg-final { scan-assembler-times "bextr\[ \\t]+\[^\\n]*rax" 2 } } */
-/* { dg-final { scan-assembler "blsi\[^\\n]*rax" } } */
-/* { dg-final { scan-assembler "blsmsk\[^\\n]*rax" } } */
-/* { dg-final { scan-assembler "blsr\[^\\n]*rax" } } */
-/* { dg-final { scan-assembler "tzcntq\[^\\n]*rax" } } */
+/* { dg-final { scan-assembler-times "blsi\[^\\n]*rax" 2 } } */
+/* { dg-final { scan-assembler-times "blsmsk\[^\\n]*rax" 2 } } */
+/* { dg-final { scan-assembler-times "blsr\[^\\n]*rax" 2 } } */
+/* { dg-final { scan-assembler-times "tzcntq\[^\\n]*rax" 2 } } */
 
 #include <x86intrin.h>
 
@@ -35,20 +35,44 @@ func_blsi64 (unsigned long long X)
   return __blsi_u64 (X);
 }
 
+unsigned long long
+func_blsi64_2 (unsigned long long X)
+{
+  return _blsi_u64 (X);
+}
+
 unsigned long long
 func_blsmsk64 (unsigned long long X)
 {
   return __blsmsk_u64 (X);
 }
 
+unsigned long long
+func_blsmsk64_2 (unsigned long long X)
+{
+  return _blsmsk_u64 (X);
+}
+
 unsigned long long
 func_blsr64 (unsigned long long X)
 {
   return __blsr_u64 (X);
 }
 
+unsigned long long
+func_blsr64_2 (unsigned long long X)
+{
+  return _blsr_u64 (X);
+}
+
 unsigned long long
 func_tzcnt64 (unsigned long long X)
 {
   return __tzcnt_u64 (X);
 }
+
+unsigned long long
+func_tzcnt64_2 (unsigned long long X)
+{
+  return _tzcnt_u64 (X);
+}