1 #include <limits.h>
2 
3 extern void abort(void);
4 extern void exit(int);
5 
6 #if __LONG_LONG_MAX__ == 9223372036854775807LL
7 #define BITS 64
8 
9 static long long const zext[64] = {
10   0x7654321fedcba980LL,
11   0x3b2a190ff6e5d4c0LL,
12   0x1d950c87fb72ea60LL,
13   0xeca8643fdb97530LL,
14   0x7654321fedcba98LL,
15   0x3b2a190ff6e5d4cLL,
16   0x1d950c87fb72ea6LL,
17   0xeca8643fdb9753LL,
18   0x7654321fedcba9LL,
19   0x3b2a190ff6e5d4LL,
20   0x1d950c87fb72eaLL,
21   0xeca8643fdb975LL,
22   0x7654321fedcbaLL,
23   0x3b2a190ff6e5dLL,
24   0x1d950c87fb72eLL,
25   0xeca8643fdb97LL,
26   0x7654321fedcbLL,
27   0x3b2a190ff6e5LL,
28   0x1d950c87fb72LL,
29   0xeca8643fdb9LL,
30   0x7654321fedcLL,
31   0x3b2a190ff6eLL,
32   0x1d950c87fb7LL,
33   0xeca8643fdbLL,
34   0x7654321fedLL,
35   0x3b2a190ff6LL,
36   0x1d950c87fbLL,
37   0xeca8643fdLL,
38   0x7654321feLL,
39   0x3b2a190ffLL,
40   0x1d950c87fLL,
41   0xeca8643fLL,
42   0x7654321fLL,
43   0x3b2a190fLL,
44   0x1d950c87LL,
45   0xeca8643LL,
46   0x7654321LL,
47   0x3b2a190LL,
48   0x1d950c8LL,
49   0xeca864LL,
50   0x765432LL,
51   0x3b2a19LL,
52   0x1d950cLL,
53   0xeca86LL,
54   0x76543LL,
55   0x3b2a1LL,
56   0x1d950LL,
57   0xeca8LL,
58   0x7654LL,
59   0x3b2aLL,
60   0x1d95LL,
61   0xecaLL,
62   0x765LL,
63   0x3b2LL,
64   0x1d9LL,
65   0xecLL,
66   0x76LL,
67   0x3bLL,
68   0x1dLL,
69   0xeLL,
70   0x7LL,
71   0x3LL,
72   0x1LL,
73   0LL
74 };
75 
76 static long long const sext[64] = {
77   0x8edcba9f76543210LL,
78   0xc76e5d4fbb2a1908LL,
79   0xe3b72ea7dd950c84LL,
80   0xf1db9753eeca8642LL,
81   0xf8edcba9f7654321LL,
82   0xfc76e5d4fbb2a190LL,
83   0xfe3b72ea7dd950c8LL,
84   0xff1db9753eeca864LL,
85   0xff8edcba9f765432LL,
86   0xffc76e5d4fbb2a19LL,
87   0xffe3b72ea7dd950cLL,
88   0xfff1db9753eeca86LL,
89   0xfff8edcba9f76543LL,
90   0xfffc76e5d4fbb2a1LL,
91   0xfffe3b72ea7dd950LL,
92   0xffff1db9753eeca8LL,
93   0xffff8edcba9f7654LL,
94   0xffffc76e5d4fbb2aLL,
95   0xffffe3b72ea7dd95LL,
96   0xfffff1db9753eecaLL,
97   0xfffff8edcba9f765LL,
98   0xfffffc76e5d4fbb2LL,
99   0xfffffe3b72ea7dd9LL,
100   0xffffff1db9753eecLL,
101   0xffffff8edcba9f76LL,
102   0xffffffc76e5d4fbbLL,
103   0xffffffe3b72ea7ddLL,
104   0xfffffff1db9753eeLL,
105   0xfffffff8edcba9f7LL,
106   0xfffffffc76e5d4fbLL,
107   0xfffffffe3b72ea7dLL,
108   0xffffffff1db9753eLL,
109   0xffffffff8edcba9fLL,
110   0xffffffffc76e5d4fLL,
111   0xffffffffe3b72ea7LL,
112   0xfffffffff1db9753LL,
113   0xfffffffff8edcba9LL,
114   0xfffffffffc76e5d4LL,
115   0xfffffffffe3b72eaLL,
116   0xffffffffff1db975LL,
117   0xffffffffff8edcbaLL,
118   0xffffffffffc76e5dLL,
119   0xffffffffffe3b72eLL,
120   0xfffffffffff1db97LL,
121   0xfffffffffff8edcbLL,
122   0xfffffffffffc76e5LL,
123   0xfffffffffffe3b72LL,
124   0xffffffffffff1db9LL,
125   0xffffffffffff8edcLL,
126   0xffffffffffffc76eLL,
127   0xffffffffffffe3b7LL,
128   0xfffffffffffff1dbLL,
129   0xfffffffffffff8edLL,
130   0xfffffffffffffc76LL,
131   0xfffffffffffffe3bLL,
132   0xffffffffffffff1dLL,
133   0xffffffffffffff8eLL,
134   0xffffffffffffffc7LL,
135   0xffffffffffffffe3LL,
136   0xfffffffffffffff1LL,
137   0xfffffffffffffff8LL,
138   0xfffffffffffffffcLL,
139   0xfffffffffffffffeLL,
140   0xffffffffffffffffLL
141 };
142 
143 #elif __LONG_LONG_MAX__ == 2147483647LL
144 #define BITS 32
145 
146 static long long const zext[32] = {
147   0x76543218LL,
148   0x3b2a190cLL,
149   0x1d950c86LL,
150   0xeca8643LL,
151   0x7654321LL,
152   0x3b2a190LL,
153   0x1d950c8LL,
154   0xeca864LL,
155   0x765432LL,
156   0x3b2a19LL,
157   0x1d950cLL,
158   0xeca86LL,
159   0x76543LL,
160   0x3b2a1LL,
161   0x1d950LL,
162   0xeca8LL,
163   0x7654LL,
164   0x3b2aLL,
165   0x1d95LL,
166   0xecaLL,
167   0x765LL,
168   0x3b2LL,
169   0x1d9LL,
170   0xecLL,
171   0x76LL,
172   0x3bLL,
173   0x1dLL,
174   0xeLL,
175   0x7LL,
176   0x3LL,
177   0x1LL,
178   0LL
179 };
180 
181 static long long const sext[64] = {
182   0x87654321LL,
183   0xc3b2a190LL,
184   0xe1d950c8LL,
185   0xf0eca864LL,
186   0xf8765432LL,
187   0xfc3b2a19LL,
188   0xfe1d950cLL,
189   0xff0eca86LL,
190   0xff876543LL,
191   0xffc3b2a1LL,
192   0xffe1d950LL,
193   0xfff0eca8LL,
194   0xfff87654LL,
195   0xfffc3b2aLL,
196   0xfffe1d95LL,
197   0xffff0ecaLL,
198   0xffff8765LL,
199   0xffffc3b2LL,
200   0xffffe1d9LL,
201   0xfffff0ecLL,
202   0xfffff876LL,
203   0xfffffc3bLL,
204   0xfffffe1dLL,
205   0xffffff0eLL,
206   0xffffff87LL,
207   0xffffffc3LL,
208   0xffffffe1LL,
209   0xfffffff0LL,
210   0xfffffff8LL,
211   0xfffffffcLL,
212   0xfffffffeLL,
213   0xffffffffLL
214 };
215 
216 #else
217 #error "Update the test case."
218 #endif
219 
220 static long long
variable_shift(long long x,int i)221 variable_shift(long long x, int i)
222 {
223   return x >> i;
224 }
225 
226 static long long
constant_shift(long long x,int i)227 constant_shift(long long x, int i)
228 {
229   switch (i)
230     {
231     case 0: x = x >> 0; break;
232     case 1: x = x >> 1; break;
233     case 2: x = x >> 2; break;
234     case 3: x = x >> 3; break;
235     case 4: x = x >> 4; break;
236     case 5: x = x >> 5; break;
237     case 6: x = x >> 6; break;
238     case 7: x = x >> 7; break;
239     case 8: x = x >> 8; break;
240     case 9: x = x >> 9; break;
241     case 10: x = x >> 10; break;
242     case 11: x = x >> 11; break;
243     case 12: x = x >> 12; break;
244     case 13: x = x >> 13; break;
245     case 14: x = x >> 14; break;
246     case 15: x = x >> 15; break;
247     case 16: x = x >> 16; break;
248     case 17: x = x >> 17; break;
249     case 18: x = x >> 18; break;
250     case 19: x = x >> 19; break;
251     case 20: x = x >> 20; break;
252     case 21: x = x >> 21; break;
253     case 22: x = x >> 22; break;
254     case 23: x = x >> 23; break;
255     case 24: x = x >> 24; break;
256     case 25: x = x >> 25; break;
257     case 26: x = x >> 26; break;
258     case 27: x = x >> 27; break;
259     case 28: x = x >> 28; break;
260     case 29: x = x >> 29; break;
261     case 30: x = x >> 30; break;
262     case 31: x = x >> 31; break;
263 #if BITS > 32
264     case 32: x = x >> 32; break;
265     case 33: x = x >> 33; break;
266     case 34: x = x >> 34; break;
267     case 35: x = x >> 35; break;
268     case 36: x = x >> 36; break;
269     case 37: x = x >> 37; break;
270     case 38: x = x >> 38; break;
271     case 39: x = x >> 39; break;
272     case 40: x = x >> 40; break;
273     case 41: x = x >> 41; break;
274     case 42: x = x >> 42; break;
275     case 43: x = x >> 43; break;
276     case 44: x = x >> 44; break;
277     case 45: x = x >> 45; break;
278     case 46: x = x >> 46; break;
279     case 47: x = x >> 47; break;
280     case 48: x = x >> 48; break;
281     case 49: x = x >> 49; break;
282     case 50: x = x >> 50; break;
283     case 51: x = x >> 51; break;
284     case 52: x = x >> 52; break;
285     case 53: x = x >> 53; break;
286     case 54: x = x >> 54; break;
287     case 55: x = x >> 55; break;
288     case 56: x = x >> 56; break;
289     case 57: x = x >> 57; break;
290     case 58: x = x >> 58; break;
291     case 59: x = x >> 59; break;
292     case 60: x = x >> 60; break;
293     case 61: x = x >> 61; break;
294     case 62: x = x >> 62; break;
295     case 63: x = x >> 63; break;
296 #endif
297 
298     default:
299       abort ();
300     }
301   return x;
302 }
303 
304 int
main()305 main()
306 {
307   int i;
308 
309   for (i = 0; i < BITS; ++i)
310     {
311       long long y = variable_shift (zext[0], i);
312       if (y != zext[i])
313 	abort ();
314     }
315   for (i = 0; i < BITS; ++i)
316     {
317       long long y = variable_shift (sext[0], i);
318       if (y != sext[i])
319 	abort ();
320     }
321   for (i = 0; i < BITS; ++i)
322     {
323       long long y = constant_shift (zext[0], i);
324       if (y != zext[i])
325 	abort ();
326     }
327   for (i = 0; i < BITS; ++i)
328     {
329       long long y = constant_shift (sext[0], i);
330       if (y != sext[i])
331 	abort ();
332     }
333 
334   exit (0);
335 }
336