1/* { dg-do run { target { lzcnt } } } */
2/* { dg-options "-O2 -mlzcnt -fno-inline" } */
3
4#include <x86intrin.h>
5
6#include "lzcnt-check.h"
7
8short calc_lzcnt_u16 (short src)
9{
10  int i;
11  short res = 0;
12
13  while ((res < 16) && (((src >> (15 - res)) & 1) == 0))
14    ++res;
15
16  return res;
17}
18
19static void
20lzcnt_test ()
21{
22  unsigned i;
23  short src = 0x7ace;
24  short res, res_ref;
25
26  for (i=0; i<5; ++i) {
27    src = src >> i;
28
29    res_ref = calc_lzcnt_u16 (src);
30    res = __lzcnt16 (src);
31
32    if (res != res_ref)
33      abort();
34  }
35}
36