2015-10-17 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / gcc / testsuite / c-c++-common / rotate-5.c
blob35b14b86c3afd0c6ef19d328c972fa5b1c9db449
1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
4 extern
5 #ifdef __cplusplus
6 "C"
7 #endif
8 void abort (void);
10 #if __CHAR_BIT__ * __SIZEOF_LONG_LONG__ == 64
11 __attribute__((noinline, noclone))
12 unsigned long long
13 f1 (unsigned long long x, unsigned int y)
15 return (x << y) | (x >> ((-y) & 63));
18 #if __CHAR_BIT__ * __SIZEOF_INT128__ == 128
19 __attribute__((noinline, noclone))
20 unsigned __int128
21 f2 (unsigned __int128 x, unsigned int y)
23 return (x << y) | (x >> ((-y) & 128));
25 #endif
26 #endif
28 int
29 main ()
31 #if __CHAR_BIT__ * __SIZEOF_LONG_LONG__ == 64
32 if (f1 (0x123456789abcdef0ULL, 0) != 0x123456789abcdef0ULL)
33 abort ();
34 #if __CHAR_BIT__ * __SIZEOF_INT128__ == 128
35 if (f2 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
36 | 0x0fedcba987654321ULL, 0)
37 != ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
38 | 0x0fedcba987654321ULL))
39 abort ();
40 #endif
41 #endif
42 return 0;