1/* { dg-do compile { target { ! { ia32 }  } } } */
2/* { dg-options "-O2 -fno-ipa-icf -mbmi " } */
3/* { dg-final { scan-assembler "andn\[^\\n]*rax" } } */
4/* { dg-final { scan-assembler-times "bextr\[ \\t]+\[^\\n]*rax" 2 } } */
5/* { dg-final { scan-assembler-times "blsi\[^\\n]*rax" 2 } } */
6/* { dg-final { scan-assembler-times "blsmsk\[^\\n]*rax" 2 } } */
7/* { dg-final { scan-assembler-times "blsr\[^\\n]*rax" 2 } } */
8/* { dg-final { scan-assembler-times "tzcntq\[^\\n]*rax" 2 } } */
9
10#include <x86intrin.h>
11
12unsigned long long
13func_andn64 (unsigned long long X, unsigned long long Y)
14{
15  return __andn_u64 (X, Y);
16}
17
18unsigned long long
19func_bextr64 (unsigned long long X, unsigned long long Y)
20{
21  return __bextr_u64 (X, Y);
22}
23
24unsigned long long
25func_bextr64_3args (unsigned long long X,
26		    unsigned long long Y,
27		    unsigned long long Z)
28{
29  return _bextr_u64 (X, Y, Z);
30}
31
32unsigned long long
33func_blsi64 (unsigned long long X)
34{
35  return __blsi_u64 (X);
36}
37
38unsigned long long
39func_blsi64_2 (unsigned long long X)
40{
41  return _blsi_u64 (X);
42}
43
44unsigned long long
45func_blsmsk64 (unsigned long long X)
46{
47  return __blsmsk_u64 (X);
48}
49
50unsigned long long
51func_blsmsk64_2 (unsigned long long X)
52{
53  return _blsmsk_u64 (X);
54}
55
56unsigned long long
57func_blsr64 (unsigned long long X)
58{
59  return __blsr_u64 (X);
60}
61
62unsigned long long
63func_blsr64_2 (unsigned long long X)
64{
65  return _blsr_u64 (X);
66}
67
68unsigned long long
69func_tzcnt64 (unsigned long long X)
70{
71  return __tzcnt_u64 (X);
72}
73
74unsigned long long
75func_tzcnt64_2 (unsigned long long X)
76{
77  return _tzcnt_u64 (X);
78}
79