(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
bmi2-bzhi-2.c
       1  /* PR target/65368 */
       2  /* { dg-do run { target bmi2 } } */
       3  /* { dg-options "-O2 -mbmi2" } */
       4  
       5  #include <x86intrin.h>
       6  #include "bmi2-check.h"
       7  
       8  unsigned int a;
       9  unsigned long long b;
      10  
      11  #define A __attribute__((noinline, noclone))
      12  
      13  A unsigned int f1 (void) { return _bzhi_u32 (a, 0); }
      14  A unsigned int f2 (unsigned int x) { return _bzhi_u32 (x, 0); }
      15  A unsigned int f3 (void) { return _bzhi_u32 (a, 5); }
      16  A unsigned int f4 (unsigned int x) { return _bzhi_u32 (x, 5); }
      17  A unsigned int f5 (void) { return _bzhi_u32 (a, 31); }
      18  A unsigned int f6 (unsigned int x) { return _bzhi_u32 (x, 31); }
      19  A unsigned int f7 (void) { return _bzhi_u32 (a, 32); }
      20  A unsigned int f8 (unsigned int x) { return _bzhi_u32 (x, 32); }
      21  A unsigned int f9 (void) { return _bzhi_u32 (a, 37); }
      22  A unsigned int f10 (unsigned int x) { return _bzhi_u32 (x, 37); }
      23  A unsigned int f11 (void) { return _bzhi_u32 (a, 257); }
      24  A unsigned int f12 (unsigned int x) { return _bzhi_u32 (x, 257); }
      25  A unsigned int f13 (void) { return _bzhi_u32 (a, 289); }
      26  A unsigned int f14 (unsigned int x) { return _bzhi_u32 (x, 289); }
      27  #ifdef __x86_64__
      28  A unsigned long long f21 (void) { return _bzhi_u64 (b, 0); }
      29  A unsigned long long f22 (unsigned long long x) { return _bzhi_u64 (x, 0); }
      30  A unsigned long long f23 (void) { return _bzhi_u64 (b, 5); }
      31  A unsigned long long f24 (unsigned long long x) { return _bzhi_u64 (x, 5); }
      32  A unsigned long long f25 (void) { return _bzhi_u64 (b, 63); }
      33  A unsigned long long f26 (unsigned long long x) { return _bzhi_u64 (x, 63); }
      34  A unsigned long long f27 (void) { return _bzhi_u64 (b, 64); }
      35  A unsigned long long f28 (unsigned long long x) { return _bzhi_u64 (x, 64); }
      36  A unsigned long long f29 (void) { return _bzhi_u64 (b, 69); }
      37  A unsigned long long f30 (unsigned long long x) { return _bzhi_u64 (x, 69); }
      38  A unsigned long long f31 (void) { return _bzhi_u64 (b, 257); }
      39  A unsigned long long f32 (unsigned long long x) { return _bzhi_u64 (x, 257); }
      40  A unsigned long long f33 (void) { return _bzhi_u64 (b, 321); }
      41  A unsigned long long f34 (unsigned long long x) { return _bzhi_u64 (x, 321); }
      42  #endif
      43  
      44  static void
      45  bmi2_test ()
      46  {
      47    a = -1U;
      48    b = -1ULL;
      49    if (f1 () != 0 || f2 (-1U) != 0
      50        || f3 () != 0x1f || f4 (-1U) != 0x1f
      51        || f5 () != 0x7fffffffU || f6 (-1U) != 0x7fffffffU
      52        || f7 () != -1U || f8 (-1U) != -1U
      53        || f9 () != -1U || f10 (-1U) != -1U
      54        || f11 () != 1 || f12 (-1U) != 1
      55        || f13 () != -1U || f14 (-1U) != -1U)
      56      abort ();
      57  #ifdef __x86_64__
      58    if (f21 () != 0 || f22 (-1ULL) != 0
      59        || f23 () != 0x1f || f24 (-1ULL) != 0x1f
      60        || f25 () != 0x7fffffffffffffffULL || f26 (-1ULL) != 0x7fffffffffffffffULL
      61        || f27 () != -1ULL || f28 (-1ULL) != -1ULL
      62        || f29 () != -1ULL || f30 (-1ULL) != -1ULL
      63        || f31 () != 1 || f32 (-1ULL) != 1
      64        || f33 () != -1ULL || f34 (-1ULL) != -1ULL)
      65      abort ();
      66  #endif
      67  }