1  /* { dg-do run } */
       2  /* { dg-options "-O3 -fno-inline" } */
       3  /* { dg-require-effective-target lp64 } */
       4  /* { dg-require-effective-target ppc_cpu_supports_hw } */
       5  
       6  #define NO_WARN_X86_INTRINSICS 1
       7  #include <x86intrin.h>
       8  #include "bmi-check.h"
       9  
      10  long long calc_tzcnt_u64 (long long src)
      11  {
      12    int i;
      13    int res = 0;
      14  
      15    while ( (res<64) && ((src&1) == 0)) {
      16      ++res;
      17      src >>= 1;
      18    }
      19  
      20    return res;
      21  }
      22  
      23  static void
      24  bmi_test ()
      25  {
      26    unsigned i;
      27    long long src = 0xfacec0ffeefacec0;
      28    long long res, res_ref;
      29  
      30    for (i=0; i<5; ++i) {
      31      src = (i + src) << i;
      32  
      33      res_ref = calc_tzcnt_u64 (src);
      34      res = __tzcnt_u64 (src);
      35  
      36      if (res != res_ref)
      37        abort();
      38    }
      39  }