public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6089] i386: Add missing BMI intrinsic to align with clang
@ 2021-12-21  8:30 Hongyu Wang
  0 siblings, 0 replies; only message in thread
From: Hongyu Wang @ 2021-12-21  8:30 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:d22907975b2abb79ba07eb2f54b64a9c952100ed

commit r12-6089-gd22907975b2abb79ba07eb2f54b64a9c952100ed
Author: Jiang Haochen <haochen.jiang@intel.com>
Date:   Tue Dec 21 16:12:02 2021 +0800

    i386: Add missing BMI intrinsic to align with clang
    
    gcc/ChangeLog:
    
            * config/i386/bmiintrin.h (_tzcnt_u16): New intrinsic.
            (_andn_u32): Ditto.
            (_andn_u64): Ditto.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/i386/bmi-1.c: Add test for new intrinsic.
            * gcc.target/i386/bmi-2.c: Ditto.
            * gcc.target/i386/bmi-3.c: Ditto.

Diff:
---
 gcc/config/i386/bmiintrin.h           | 18 ++++++++++++++++++
 gcc/testsuite/gcc.target/i386/bmi-1.c |  8 +++++++-
 gcc/testsuite/gcc.target/i386/bmi-2.c |  8 +++++++-
 gcc/testsuite/gcc.target/i386/bmi-3.c |  8 +++++++-
 4 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/gcc/config/i386/bmiintrin.h b/gcc/config/i386/bmiintrin.h
index 439d81cba11..92450a644eb 100644
--- a/gcc/config/i386/bmiintrin.h
+++ b/gcc/config/i386/bmiintrin.h
@@ -40,12 +40,24 @@ __tzcnt_u16 (unsigned short __X)
   return __builtin_ia32_tzcnt_u16 (__X);
 }
 
+extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_tzcnt_u16 (unsigned short __X)
+{
+  return __builtin_ia32_tzcnt_u16 (__X);
+}
+
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __andn_u32 (unsigned int __X, unsigned int __Y)
 {
   return ~__X & __Y;
 }
 
+extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_andn_u32 (unsigned int __X, unsigned int __Y)
+{
+  return __andn_u32 (__X, __Y);
+}
+
 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __bextr_u32 (unsigned int __X, unsigned int __Y)
 {
@@ -114,6 +126,12 @@ __andn_u64 (unsigned long long __X, unsigned long long __Y)
   return ~__X & __Y;
 }
 
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_andn_u64 (unsigned long long __X, unsigned long long __Y)
+{
+  return __andn_u64 (__X, __Y);
+}
+
 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __bextr_u64 (unsigned long long __X, unsigned long long __Y)
 {
diff --git a/gcc/testsuite/gcc.target/i386/bmi-1.c b/gcc/testsuite/gcc.target/i386/bmi-1.c
index 738705e29d8..141adaac016 100644
--- a/gcc/testsuite/gcc.target/i386/bmi-1.c
+++ b/gcc/testsuite/gcc.target/i386/bmi-1.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -fno-ipa-icf -mbmi " } */
-/* { dg-final { scan-assembler "andn\[^\\n]*eax" } } */
+/* { dg-final { scan-assembler-times "andn\[^\\n]*eax" 2 } } */
 /* { dg-final { scan-assembler-times "bextr\[ \\t]+\[^\\n]*eax" 2 } } */
 /* { dg-final { scan-assembler-times "blsi\[^\\n]*eax" 2 } } */
 /* { dg-final { scan-assembler-times "blsmsk\[^\\n]*eax" 2 } } */
@@ -15,6 +15,12 @@ func_andn32 (unsigned int X, unsigned int Y)
   return __andn_u32(X, Y);
 }
 
+unsigned int
+func_andn32_2 (unsigned int X, unsigned int Y)
+{
+  return _andn_u32(X, Y);
+}
+
 unsigned int
 func_bextr32 (unsigned int X, unsigned int Y)
 {
diff --git a/gcc/testsuite/gcc.target/i386/bmi-2.c b/gcc/testsuite/gcc.target/i386/bmi-2.c
index 6b8595eb9e1..3f9052a4991 100644
--- a/gcc/testsuite/gcc.target/i386/bmi-2.c
+++ b/gcc/testsuite/gcc.target/i386/bmi-2.c
@@ -1,6 +1,6 @@
 /* { dg-do compile { target { ! ia32  } } } */
 /* { dg-options "-O2 -fno-ipa-icf -mbmi " } */
-/* { dg-final { scan-assembler "andn\[^\\n]*rax" } } */
+/* { dg-final { scan-assembler-times "andn\[^\\n]*rax" 2 } } */
 /* { dg-final { scan-assembler-times "bextr\[ \\t]+\[^\\n]*rax" 2 } } */
 /* { dg-final { scan-assembler-times "blsi\[^\\n]*rax" 2 } } */
 /* { dg-final { scan-assembler-times "blsmsk\[^\\n]*rax" 2 } } */
@@ -15,6 +15,12 @@ func_andn64 (unsigned long long X, unsigned long long Y)
   return __andn_u64 (X, Y);
 }
 
+unsigned long long
+func_andn64_2 (unsigned long long X, unsigned long long Y)
+{
+  return _andn_u64 (X, Y);
+}
+
 unsigned long long
 func_bextr64 (unsigned long long X, unsigned long long Y)
 {
diff --git a/gcc/testsuite/gcc.target/i386/bmi-3.c b/gcc/testsuite/gcc.target/i386/bmi-3.c
index ddc5e0f66e2..0b91bc25bf8 100644
--- a/gcc/testsuite/gcc.target/i386/bmi-3.c
+++ b/gcc/testsuite/gcc.target/i386/bmi-3.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mbmi " } */
-/* { dg-final { scan-assembler "tzcntw\[^\\n]*(%|)ax" } } */
+/* { dg-final { scan-assembler-times "tzcntw\[^\\n]*%?ax" 2 } } */
 
 #include <x86intrin.h>
 
@@ -9,3 +9,9 @@ func_tzcnt16 (unsigned short X)
 {
   return __tzcnt_u16(X);
 }
+
+unsigned short
+func_tzcnt16_2 (unsigned short X)
+{
+  return _tzcnt_u16(X);
+}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-21  8:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-21  8:30 [gcc r12-6089] i386: Add missing BMI intrinsic to align with clang Hongyu Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).