1#include <limits.h>
2
3extern void abort(void);
4extern void exit(int);
5
6#if __LONG_LONG_MAX__ == 9223372036854775807LL
7#define BITS 64
8
9static unsigned long long const data[64] = {
10  0x123456789abcdefULL,
11  0x2468acf13579bdeULL,
12  0x48d159e26af37bcULL,
13  0x91a2b3c4d5e6f78ULL,
14  0x123456789abcdef0ULL,
15  0x2468acf13579bde0ULL,
16  0x48d159e26af37bc0ULL,
17  0x91a2b3c4d5e6f780ULL,
18  0x23456789abcdef00ULL,
19  0x468acf13579bde00ULL,
20  0x8d159e26af37bc00ULL,
21  0x1a2b3c4d5e6f7800ULL,
22  0x3456789abcdef000ULL,
23  0x68acf13579bde000ULL,
24  0xd159e26af37bc000ULL,
25  0xa2b3c4d5e6f78000ULL,
26  0x456789abcdef0000ULL,
27  0x8acf13579bde0000ULL,
28  0x159e26af37bc0000ULL,
29  0x2b3c4d5e6f780000ULL,
30  0x56789abcdef00000ULL,
31  0xacf13579bde00000ULL,
32  0x59e26af37bc00000ULL,
33  0xb3c4d5e6f7800000ULL,
34  0x6789abcdef000000ULL,
35  0xcf13579bde000000ULL,
36  0x9e26af37bc000000ULL,
37  0x3c4d5e6f78000000ULL,
38  0x789abcdef0000000ULL,
39  0xf13579bde0000000ULL,
40  0xe26af37bc0000000ULL,
41  0xc4d5e6f780000000ULL,
42  0x89abcdef00000000ULL,
43  0x13579bde00000000ULL,
44  0x26af37bc00000000ULL,
45  0x4d5e6f7800000000ULL,
46  0x9abcdef000000000ULL,
47  0x3579bde000000000ULL,
48  0x6af37bc000000000ULL,
49  0xd5e6f78000000000ULL,
50  0xabcdef0000000000ULL,
51  0x579bde0000000000ULL,
52  0xaf37bc0000000000ULL,
53  0x5e6f780000000000ULL,
54  0xbcdef00000000000ULL,
55  0x79bde00000000000ULL,
56  0xf37bc00000000000ULL,
57  0xe6f7800000000000ULL,
58  0xcdef000000000000ULL,
59  0x9bde000000000000ULL,
60  0x37bc000000000000ULL,
61  0x6f78000000000000ULL,
62  0xdef0000000000000ULL,
63  0xbde0000000000000ULL,
64  0x7bc0000000000000ULL,
65  0xf780000000000000ULL,
66  0xef00000000000000ULL,
67  0xde00000000000000ULL,
68  0xbc00000000000000ULL,
69  0x7800000000000000ULL,
70  0xf000000000000000ULL,
71  0xe000000000000000ULL,
72  0xc000000000000000ULL,
73  0x8000000000000000ULL
74};
75
76#elif __LONG_LONG_MAX__ == 2147483647LL
77#define BITS 32
78
79static unsigned long long const data[32] = {
80  0x1234567fULL,
81  0x2468acfeULL,
82  0x48d159fcULL,
83  0x91a2b3f8ULL,
84  0x234567f0ULL,
85  0x468acfe0ULL,
86  0x8d159fc0ULL,
87  0x1a2b3f80ULL,
88  0x34567f00ULL,
89  0x68acfe00ULL,
90  0xd159fc00ULL,
91  0xa2b3f800ULL,
92  0x4567f000ULL,
93  0x8acfe000ULL,
94  0x159fc000ULL,
95  0x2b3f8000ULL,
96  0x567f0000ULL,
97  0xacfe0000ULL,
98  0x59fc0000ULL,
99  0xb3f80000ULL,
100  0x67f00000ULL,
101  0xcfe00000ULL,
102  0x9fc00000ULL,
103  0x3f800000ULL,
104  0x7f000000ULL,
105  0xfe000000ULL,
106  0xfc000000ULL,
107  0xf8000000ULL,
108  0xf0000000ULL,
109  0xe0000000ULL,
110  0xc0000000ULL,
111  0x80000000ULL
112};
113
114#else
115#error "Update the test case."
116#endif
117
118static unsigned long long
119variable_shift(unsigned long long x, int i)
120{
121  return x << i;
122}
123
124static unsigned long long
125constant_shift(unsigned long long x, int i)
126{
127  switch (i)
128    {
129    case 0: x = x << 0; break;
130    case 1: x = x << 1; break;
131    case 2: x = x << 2; break;
132    case 3: x = x << 3; break;
133    case 4: x = x << 4; break;
134    case 5: x = x << 5; break;
135    case 6: x = x << 6; break;
136    case 7: x = x << 7; break;
137    case 8: x = x << 8; break;
138    case 9: x = x << 9; break;
139    case 10: x = x << 10; break;
140    case 11: x = x << 11; break;
141    case 12: x = x << 12; break;
142    case 13: x = x << 13; break;
143    case 14: x = x << 14; break;
144    case 15: x = x << 15; break;
145    case 16: x = x << 16; break;
146    case 17: x = x << 17; break;
147    case 18: x = x << 18; break;
148    case 19: x = x << 19; break;
149    case 20: x = x << 20; break;
150    case 21: x = x << 21; break;
151    case 22: x = x << 22; break;
152    case 23: x = x << 23; break;
153    case 24: x = x << 24; break;
154    case 25: x = x << 25; break;
155    case 26: x = x << 26; break;
156    case 27: x = x << 27; break;
157    case 28: x = x << 28; break;
158    case 29: x = x << 29; break;
159    case 30: x = x << 30; break;
160    case 31: x = x << 31; break;
161#if BITS > 32
162    case 32: x = x << 32; break;
163    case 33: x = x << 33; break;
164    case 34: x = x << 34; break;
165    case 35: x = x << 35; break;
166    case 36: x = x << 36; break;
167    case 37: x = x << 37; break;
168    case 38: x = x << 38; break;
169    case 39: x = x << 39; break;
170    case 40: x = x << 40; break;
171    case 41: x = x << 41; break;
172    case 42: x = x << 42; break;
173    case 43: x = x << 43; break;
174    case 44: x = x << 44; break;
175    case 45: x = x << 45; break;
176    case 46: x = x << 46; break;
177    case 47: x = x << 47; break;
178    case 48: x = x << 48; break;
179    case 49: x = x << 49; break;
180    case 50: x = x << 50; break;
181    case 51: x = x << 51; break;
182    case 52: x = x << 52; break;
183    case 53: x = x << 53; break;
184    case 54: x = x << 54; break;
185    case 55: x = x << 55; break;
186    case 56: x = x << 56; break;
187    case 57: x = x << 57; break;
188    case 58: x = x << 58; break;
189    case 59: x = x << 59; break;
190    case 60: x = x << 60; break;
191    case 61: x = x << 61; break;
192    case 62: x = x << 62; break;
193    case 63: x = x << 63; break;
194#endif
195
196    default:
197      abort ();
198    }
199  return x;
200}
201
202int
203main()
204{
205  int i;
206
207  for (i = 0; i < BITS; ++i)
208    {
209      unsigned long long y = variable_shift (data[0], i);
210      if (y != data[i])
211	abort ();
212    }
213  for (i = 0; i < BITS; ++i)
214    {
215      unsigned long long y = constant_shift (data[0], i);
216      if (y != data[i])
217	abort ();
218    }
219
220  exit (0);
221}
222