1 /* Functional test for DI left shift. */
2
3 /* { dg-do run } */
4 /* { dg-options "-pedantic-errors" } */
5
6 #include <stddef.h>
7 #include <stdint.h>
8
9 extern void abort (void);
10
11 uint64_t __attribute__((noinline)) ashift_1 (uint64_t a)
12 {
13 return a << 1;
14 }
15
16 uint64_t __attribute__((noinline)) ashift_10 (uint64_t a)
17 {
18 return a << 10;
19 }
20
21 uint64_t __attribute__((noinline)) ashift_32 (uint64_t a)
22 {
23 return a << 32;
24 }
25
26 uint64_t __attribute__((noinline)) ashift_36 (uint64_t a)
27 {
28 return a << 36;
29 }
30
31 int
32 main (int argc, char** argv)
33 {
34 if (ashift_1 (0xaaaa5555aaaa5555ull) != 0x5554aaab5554aaaaull)
35 abort();
36 if (ashift_10 (0xaaaa5555aaaa5555ull) != 0xa95556aaa9555400ull)
37 abort();
38 if (ashift_32 (0xaaaa5555aaaa5555ull) != 0xaaaa555500000000ull)
39 abort();
40 if (ashift_36 (0xaaaa5555aaaa5555ull) != 0xaaa5555000000000ull)
41 abort();
42
43 if (ashift_1 (0x1234567822334455ull) != 0x2468acf0446688aaull)
44 abort();
45 if (ashift_10 (0x1234567822334455ull) != 0xd159e088cd115400ull)
46 abort();
47 if (ashift_32 (0x1234567822334455ull) != 0x2233445500000000ull)
48 abort();
49 if (ashift_36 (0x1234567822334455ull) != 0x2334455000000000ull)
50 abort();
51
52 return 0;
53 }