1 /* { dg-options "-O2" } */
2 /* { dg-do run } */
3
4 extern void abort (void);
5
6 typedef unsigned int __u32;
7
8 __u32
9 __rev16_32_alt (__u32 x)
10 {
11 return (((__u32)(x) & (__u32)0xff00ff00UL) >> 8)
12 | (((__u32)(x) & (__u32)0x00ff00ffUL) << 8);
13 }
14
15 __u32
16 __rev16_32 (__u32 x)
17 {
18 return (((__u32)(x) & (__u32)0x00ff00ffUL) << 8)
19 | (((__u32)(x) & (__u32)0xff00ff00UL) >> 8);
20 }
21
22 typedef unsigned long long __u64;
23
24 __u64
25 __rev16_64_alt (__u64 x)
26 {
27 return (((__u64)(x) & (__u64)0xff00ff00ff00ff00UL) >> 8)
28 | (((__u64)(x) & (__u64)0x00ff00ff00ff00ffUL) << 8);
29 }
30
31 __u64
32 __rev16_64 (__u64 x)
33 {
34 return (((__u64)(x) & (__u64)0x00ff00ff00ff00ffUL) << 8)
35 | (((__u64)(x) & (__u64)0xff00ff00ff00ff00UL) >> 8);
36 }
37
38 int
39 main (void)
40 {
41 volatile __u32 in32 = 0x12345678;
42 volatile __u32 expected32 = 0x34127856;
43 volatile __u64 in64 = 0x1234567890abcdefUL;
44 volatile __u64 expected64 = 0x34127856ab90efcdUL;
45
46 if (__rev16_32 (in32) != expected32)
47 abort ();
48
49 if (__rev16_32_alt (in32) != expected32)
50 abort ();
51
52 if (__rev16_64 (in64) != expected64)
53 abort ();
54
55 if (__rev16_64_alt (in64) != expected64)
56 abort ();
57
58 return 0;
59 }