[gcc]
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / bmi2-bzhi-2.c
blob2e4a577f32e7f8f191951d072a8ce9d3090af8fd
1 /* PR target/65368 */
2 /* { dg-do run { target bmi2 } } */
3 /* { dg-options "-O2 -mbmi2" } */
5 #include <x86intrin.h>
6 #include "bmi2-check.h"
8 unsigned int a;
9 unsigned long long b;
11 #define A __attribute__((noinline, noclone))
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
44 static void
45 bmi2_test ()
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