This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, i386, PR57623] Introduce synonyms for BMI intrinsics


Thanks! Sorry, missed that!

K

On Thu, Apr 17, 2014 at 2:13 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Jul 03, 2013 at 08:14:25AM +0200, Uros Bizjak wrote:
>> On Tue, Jul 2, 2013 at 10:32 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
>> > Bootstrap passing. Updated tests passing on BMI-featured HW.
>> >
>> > ChangeLog:
>> > 2013-07-02  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.
>> >
>> > testsuite/ChangeLog:
>> > 2013-07-02  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.
>> >
>> > [1] http://gcc.gnu.org/ml/gcc-patches/2013-06/msg01286.html
>>
>> This is OK for mainline.
>>
>> BTW: Do we want to backport this patch (and your previous) to 4.8 branch?
>
> Kyrill, you've committed this only to the 4.8 branch and not to the trunk,
> which means we actually regress on this on in 4.9 compared to 4.8.2.
>
> As the patch has been approved, I went ahead and after testing it
> on x86_64 (-m32/-m64) committed it to the trunk and 4.9.
>
> 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.
>
>         * gcc.target/i386/bmi-1.c: Extend with new instrinsics.
>         Fix scan patterns.
>         * gcc.target/i386/bmi-2.c: Ditto.
>
> --- gcc/config/i386/bmiintrin.h (revision 201046)
> +++ gcc/config/i386/bmiintrin.h (revision 201047)
> @@ -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)
>  {
> @@ -66,17 +65,34 @@ __blsi_u32 (unsigned int __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__))
> @@ -111,22 +133,46 @@ __blsi_u64 (unsigned long long __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__  */
>
> --- gcc/testsuite/gcc.target/i386/bmi-1.c       (revision 201046)
> +++ gcc/testsuite/gcc.target/i386/bmi-1.c       (revision 201047)
> @@ -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>
>
> @@ -36,19 +36,43 @@ func_blsi32 (unsigned int 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);
> +}
> --- gcc/testsuite/gcc.target/i386/bmi-2.c       (revision 201046)
> +++ gcc/testsuite/gcc.target/i386/bmi-2.c       (revision 201047)
> @@ -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>
>
> @@ -36,19 +36,43 @@ func_blsi64 (unsigned long long 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);
> +}
>
>
>         Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]