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 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 
79 static 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 
118 static unsigned long long
variable_shift(unsigned long long x,int i)119 variable_shift(unsigned long long x, int i)
120 {
121   return x >> i;
122 }
123 
124 static unsigned long long
constant_shift(unsigned long long x,int i)125 constant_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 
202 int
main()203 main()
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