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 zext[64] = {
10  0x87654321fedcba90ULL,
11  0x43b2a190ff6e5d48ULL,
12  0x21d950c87fb72ea4ULL,
13  0x10eca8643fdb9752ULL,
14  0x87654321fedcba9ULL,
15  0x43b2a190ff6e5d4ULL,
16  0x21d950c87fb72eaULL,
17  0x10eca8643fdb975ULL,
18  0x87654321fedcbaULL,
19  0x43b2a190ff6e5dULL,
20  0x21d950c87fb72eULL,
21  0x10eca8643fdb97ULL,
22  0x87654321fedcbULL,
23  0x43b2a190ff6e5ULL,
24  0x21d950c87fb72ULL,
25  0x10eca8643fdb9ULL,
26  0x87654321fedcULL,
27  0x43b2a190ff6eULL,
28  0x21d950c87fb7ULL,
29  0x10eca8643fdbULL,
30  0x87654321fedULL,
31  0x43b2a190ff6ULL,
32  0x21d950c87fbULL,
33  0x10eca8643fdULL,
34  0x87654321feULL,
35  0x43b2a190ffULL,
36  0x21d950c87fULL,
37  0x10eca8643fULL,
38  0x87654321fULL,
39  0x43b2a190fULL,
40  0x21d950c87ULL,
41  0x10eca8643ULL,
42  0x87654321ULL,
43  0x43b2a190ULL,
44  0x21d950c8ULL,
45  0x10eca864ULL,
46  0x8765432ULL,
47  0x43b2a19ULL,
48  0x21d950cULL,
49  0x10eca86ULL,
50  0x876543ULL,
51  0x43b2a1ULL,
52  0x21d950ULL,
53  0x10eca8ULL,
54  0x87654ULL,
55  0x43b2aULL,
56  0x21d95ULL,
57  0x10ecaULL,
58  0x8765ULL,
59  0x43b2ULL,
60  0x21d9ULL,
61  0x10ecULL,
62  0x876ULL,
63  0x43bULL,
64  0x21dULL,
65  0x10eULL,
66  0x87ULL,
67  0x43ULL,
68  0x21ULL,
69  0x10ULL,
70  0x8ULL,
71  0x4ULL,
72  0x2ULL,
73  0x1ULL
74};
75
76#elif __LONG_LONG_MAX__ == 2147483647LL
77#define BITS 32
78
79static unsigned long long const zext[32] = {
80  0x87654321ULL,
81  0x43b2a190ULL,
82  0x21d950c8ULL,
83  0x10eca864ULL,
84  0x8765432ULL,
85  0x43b2a19ULL,
86  0x21d950cULL,
87  0x10eca86ULL,
88  0x876543ULL,
89  0x43b2a1ULL,
90  0x21d950ULL,
91  0x10eca8ULL,
92  0x87654ULL,
93  0x43b2aULL,
94  0x21d95ULL,
95  0x10ecaULL,
96  0x8765ULL,
97  0x43b2ULL,
98  0x21d9ULL,
99  0x10ecULL,
100  0x876ULL,
101  0x43bULL,
102  0x21dULL,
103  0x10eULL,
104  0x87ULL,
105  0x43ULL,
106  0x21ULL,
107  0x10ULL,
108  0x8ULL,
109  0x4ULL,
110  0x2ULL,
111  0x1ULL,
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 (zext[0], i);
210      if (y != zext[i])
211	abort ();
212    }
213  for (i = 0; i < BITS; ++i)
214    {
215      unsigned long long y = constant_shift (zext[0], i);
216      if (y != zext[i])
217	abort ();
218    }
219
220  exit (0);
221}
222