1 | // RUN: %clang_builtins %s %librt -o %t && %run %t |
2 | // REQUIRES: librt_has_clzsi2 |
3 | |
4 | #include "int_lib.h" |
5 | #include <stdio.h> |
6 | |
7 | // Returns: the number of leading 0-bits |
8 | |
9 | // Precondition: a != 0 |
10 | |
11 | COMPILER_RT_ABI int __clzsi2(si_int a); |
12 | |
13 | int test__clzsi2(si_int a, int expected) |
14 | { |
15 | int x = __clzsi2(a); |
16 | if (x != expected) |
17 | printf("error in __clzsi2(0x%X) = %d, expected %d\n" , a, x, expected); |
18 | return x != expected; |
19 | } |
20 | |
21 | char assumption_1[sizeof(di_int) == 2*sizeof(si_int)] = {0}; |
22 | char assumption_2[sizeof(si_int)*CHAR_BIT == 32] = {0}; |
23 | |
24 | int main() |
25 | { |
26 | // if (test__clzsi2(0x00000000, 32)) // undefined |
27 | // return 1; |
28 | if (test__clzsi2(0x00800000, 8)) |
29 | return 1; |
30 | if (test__clzsi2(0x01000000, 7)) |
31 | return 1; |
32 | if (test__clzsi2(0x02000000, 6)) |
33 | return 1; |
34 | if (test__clzsi2(0x03000000, 6)) |
35 | return 1; |
36 | if (test__clzsi2(0x04000000, 5)) |
37 | return 1; |
38 | if (test__clzsi2(0x05000000, 5)) |
39 | return 1; |
40 | if (test__clzsi2(0x06000000, 5)) |
41 | return 1; |
42 | if (test__clzsi2(0x07000000, 5)) |
43 | return 1; |
44 | if (test__clzsi2(0x08000000, 4)) |
45 | return 1; |
46 | if (test__clzsi2(0x09000000, 4)) |
47 | return 1; |
48 | if (test__clzsi2(0x0A000000, 4)) |
49 | return 1; |
50 | if (test__clzsi2(0x0B000000, 4)) |
51 | return 1; |
52 | if (test__clzsi2(0x0C000000, 4)) |
53 | return 1; |
54 | if (test__clzsi2(0x0D000000, 4)) |
55 | return 1; |
56 | if (test__clzsi2(0x0E000000, 4)) |
57 | return 1; |
58 | if (test__clzsi2(0x0F000000, 4)) |
59 | return 1; |
60 | if (test__clzsi2(0x10000000, 3)) |
61 | return 1; |
62 | if (test__clzsi2(0x11000000, 3)) |
63 | return 1; |
64 | if (test__clzsi2(0x12000000, 3)) |
65 | return 1; |
66 | if (test__clzsi2(0x13000000, 3)) |
67 | return 1; |
68 | if (test__clzsi2(0x14000000, 3)) |
69 | return 1; |
70 | if (test__clzsi2(0x15000000, 3)) |
71 | return 1; |
72 | if (test__clzsi2(0x16000000, 3)) |
73 | return 1; |
74 | if (test__clzsi2(0x17000000, 3)) |
75 | return 1; |
76 | if (test__clzsi2(0x18000000, 3)) |
77 | return 1; |
78 | if (test__clzsi2(0x19000000, 3)) |
79 | return 1; |
80 | if (test__clzsi2(0x1A000000, 3)) |
81 | return 1; |
82 | if (test__clzsi2(0x1B000000, 3)) |
83 | return 1; |
84 | if (test__clzsi2(0x1C000000, 3)) |
85 | return 1; |
86 | if (test__clzsi2(0x1D000000, 3)) |
87 | return 1; |
88 | if (test__clzsi2(0x1E000000, 3)) |
89 | return 1; |
90 | if (test__clzsi2(0x1F000000, 3)) |
91 | return 1; |
92 | if (test__clzsi2(0x20000000, 2)) |
93 | return 1; |
94 | if (test__clzsi2(0x21000000, 2)) |
95 | return 1; |
96 | if (test__clzsi2(0x22000000, 2)) |
97 | return 1; |
98 | if (test__clzsi2(0x23000000, 2)) |
99 | return 1; |
100 | if (test__clzsi2(0x24000000, 2)) |
101 | return 1; |
102 | if (test__clzsi2(0x25000000, 2)) |
103 | return 1; |
104 | if (test__clzsi2(0x26000000, 2)) |
105 | return 1; |
106 | if (test__clzsi2(0x27000000, 2)) |
107 | return 1; |
108 | if (test__clzsi2(0x28000000, 2)) |
109 | return 1; |
110 | if (test__clzsi2(0x29000000, 2)) |
111 | return 1; |
112 | if (test__clzsi2(0x2A000000, 2)) |
113 | return 1; |
114 | if (test__clzsi2(0x2B000000, 2)) |
115 | return 1; |
116 | if (test__clzsi2(0x2C000000, 2)) |
117 | return 1; |
118 | if (test__clzsi2(0x2D000000, 2)) |
119 | return 1; |
120 | if (test__clzsi2(0x2E000000, 2)) |
121 | return 1; |
122 | if (test__clzsi2(0x2F000000, 2)) |
123 | return 1; |
124 | if (test__clzsi2(0x30000000, 2)) |
125 | return 1; |
126 | if (test__clzsi2(0x31000000, 2)) |
127 | return 1; |
128 | if (test__clzsi2(0x32000000, 2)) |
129 | return 1; |
130 | if (test__clzsi2(0x33000000, 2)) |
131 | return 1; |
132 | if (test__clzsi2(0x34000000, 2)) |
133 | return 1; |
134 | if (test__clzsi2(0x35000000, 2)) |
135 | return 1; |
136 | if (test__clzsi2(0x36000000, 2)) |
137 | return 1; |
138 | if (test__clzsi2(0x37000000, 2)) |
139 | return 1; |
140 | if (test__clzsi2(0x38000000, 2)) |
141 | return 1; |
142 | if (test__clzsi2(0x39000000, 2)) |
143 | return 1; |
144 | if (test__clzsi2(0x3A000000, 2)) |
145 | return 1; |
146 | if (test__clzsi2(0x3B000000, 2)) |
147 | return 1; |
148 | if (test__clzsi2(0x3C000000, 2)) |
149 | return 1; |
150 | if (test__clzsi2(0x3D000000, 2)) |
151 | return 1; |
152 | if (test__clzsi2(0x3E000000, 2)) |
153 | return 1; |
154 | if (test__clzsi2(0x3F000000, 2)) |
155 | return 1; |
156 | if (test__clzsi2(0x40000000, 1)) |
157 | return 1; |
158 | if (test__clzsi2(0x41000000, 1)) |
159 | return 1; |
160 | if (test__clzsi2(0x42000000, 1)) |
161 | return 1; |
162 | if (test__clzsi2(0x43000000, 1)) |
163 | return 1; |
164 | if (test__clzsi2(0x44000000, 1)) |
165 | return 1; |
166 | if (test__clzsi2(0x45000000, 1)) |
167 | return 1; |
168 | if (test__clzsi2(0x46000000, 1)) |
169 | return 1; |
170 | if (test__clzsi2(0x47000000, 1)) |
171 | return 1; |
172 | if (test__clzsi2(0x48000000, 1)) |
173 | return 1; |
174 | if (test__clzsi2(0x49000000, 1)) |
175 | return 1; |
176 | if (test__clzsi2(0x4A000000, 1)) |
177 | return 1; |
178 | if (test__clzsi2(0x4B000000, 1)) |
179 | return 1; |
180 | if (test__clzsi2(0x4C000000, 1)) |
181 | return 1; |
182 | if (test__clzsi2(0x4D000000, 1)) |
183 | return 1; |
184 | if (test__clzsi2(0x4E000000, 1)) |
185 | return 1; |
186 | if (test__clzsi2(0x4F000000, 1)) |
187 | return 1; |
188 | if (test__clzsi2(0x50000000, 1)) |
189 | return 1; |
190 | if (test__clzsi2(0x51000000, 1)) |
191 | return 1; |
192 | if (test__clzsi2(0x52000000, 1)) |
193 | return 1; |
194 | if (test__clzsi2(0x53000000, 1)) |
195 | return 1; |
196 | if (test__clzsi2(0x54000000, 1)) |
197 | return 1; |
198 | if (test__clzsi2(0x55000000, 1)) |
199 | return 1; |
200 | if (test__clzsi2(0x56000000, 1)) |
201 | return 1; |
202 | if (test__clzsi2(0x57000000, 1)) |
203 | return 1; |
204 | if (test__clzsi2(0x58000000, 1)) |
205 | return 1; |
206 | if (test__clzsi2(0x59000000, 1)) |
207 | return 1; |
208 | if (test__clzsi2(0x5A000000, 1)) |
209 | return 1; |
210 | if (test__clzsi2(0x5B000000, 1)) |
211 | return 1; |
212 | if (test__clzsi2(0x5C000000, 1)) |
213 | return 1; |
214 | if (test__clzsi2(0x5D000000, 1)) |
215 | return 1; |
216 | if (test__clzsi2(0x5E000000, 1)) |
217 | return 1; |
218 | if (test__clzsi2(0x5F000000, 1)) |
219 | return 1; |
220 | if (test__clzsi2(0x60000000, 1)) |
221 | return 1; |
222 | if (test__clzsi2(0x61000000, 1)) |
223 | return 1; |
224 | if (test__clzsi2(0x62000000, 1)) |
225 | return 1; |
226 | if (test__clzsi2(0x63000000, 1)) |
227 | return 1; |
228 | if (test__clzsi2(0x64000000, 1)) |
229 | return 1; |
230 | if (test__clzsi2(0x65000000, 1)) |
231 | return 1; |
232 | if (test__clzsi2(0x66000000, 1)) |
233 | return 1; |
234 | if (test__clzsi2(0x67000000, 1)) |
235 | return 1; |
236 | if (test__clzsi2(0x68000000, 1)) |
237 | return 1; |
238 | if (test__clzsi2(0x69000000, 1)) |
239 | return 1; |
240 | if (test__clzsi2(0x6A000000, 1)) |
241 | return 1; |
242 | if (test__clzsi2(0x6B000000, 1)) |
243 | return 1; |
244 | if (test__clzsi2(0x6C000000, 1)) |
245 | return 1; |
246 | if (test__clzsi2(0x6D000000, 1)) |
247 | return 1; |
248 | if (test__clzsi2(0x6E000000, 1)) |
249 | return 1; |
250 | if (test__clzsi2(0x6F000000, 1)) |
251 | return 1; |
252 | if (test__clzsi2(0x70000000, 1)) |
253 | return 1; |
254 | if (test__clzsi2(0x71000000, 1)) |
255 | return 1; |
256 | if (test__clzsi2(0x72000000, 1)) |
257 | return 1; |
258 | if (test__clzsi2(0x73000000, 1)) |
259 | return 1; |
260 | if (test__clzsi2(0x74000000, 1)) |
261 | return 1; |
262 | if (test__clzsi2(0x75000000, 1)) |
263 | return 1; |
264 | if (test__clzsi2(0x76000000, 1)) |
265 | return 1; |
266 | if (test__clzsi2(0x77000000, 1)) |
267 | return 1; |
268 | if (test__clzsi2(0x78000000, 1)) |
269 | return 1; |
270 | if (test__clzsi2(0x79000000, 1)) |
271 | return 1; |
272 | if (test__clzsi2(0x7A000000, 1)) |
273 | return 1; |
274 | if (test__clzsi2(0x7B000000, 1)) |
275 | return 1; |
276 | if (test__clzsi2(0x7C000000, 1)) |
277 | return 1; |
278 | if (test__clzsi2(0x7D000000, 1)) |
279 | return 1; |
280 | if (test__clzsi2(0x7E000000, 1)) |
281 | return 1; |
282 | if (test__clzsi2(0x7F000000, 1)) |
283 | return 1; |
284 | if (test__clzsi2(0x80000000, 0)) |
285 | return 1; |
286 | if (test__clzsi2(0x81000000, 0)) |
287 | return 1; |
288 | if (test__clzsi2(0x82000000, 0)) |
289 | return 1; |
290 | if (test__clzsi2(0x83000000, 0)) |
291 | return 1; |
292 | if (test__clzsi2(0x84000000, 0)) |
293 | return 1; |
294 | if (test__clzsi2(0x85000000, 0)) |
295 | return 1; |
296 | if (test__clzsi2(0x86000000, 0)) |
297 | return 1; |
298 | if (test__clzsi2(0x87000000, 0)) |
299 | return 1; |
300 | if (test__clzsi2(0x88000000, 0)) |
301 | return 1; |
302 | if (test__clzsi2(0x89000000, 0)) |
303 | return 1; |
304 | if (test__clzsi2(0x8A000000, 0)) |
305 | return 1; |
306 | if (test__clzsi2(0x8B000000, 0)) |
307 | return 1; |
308 | if (test__clzsi2(0x8C000000, 0)) |
309 | return 1; |
310 | if (test__clzsi2(0x8D000000, 0)) |
311 | return 1; |
312 | if (test__clzsi2(0x8E000000, 0)) |
313 | return 1; |
314 | if (test__clzsi2(0x8F000000, 0)) |
315 | return 1; |
316 | if (test__clzsi2(0x90000000, 0)) |
317 | return 1; |
318 | if (test__clzsi2(0x91000000, 0)) |
319 | return 1; |
320 | if (test__clzsi2(0x92000000, 0)) |
321 | return 1; |
322 | if (test__clzsi2(0x93000000, 0)) |
323 | return 1; |
324 | if (test__clzsi2(0x94000000, 0)) |
325 | return 1; |
326 | if (test__clzsi2(0x95000000, 0)) |
327 | return 1; |
328 | if (test__clzsi2(0x96000000, 0)) |
329 | return 1; |
330 | if (test__clzsi2(0x97000000, 0)) |
331 | return 1; |
332 | if (test__clzsi2(0x98000000, 0)) |
333 | return 1; |
334 | if (test__clzsi2(0x99000000, 0)) |
335 | return 1; |
336 | if (test__clzsi2(0x9A000000, 0)) |
337 | return 1; |
338 | if (test__clzsi2(0x9B000000, 0)) |
339 | return 1; |
340 | if (test__clzsi2(0x9C000000, 0)) |
341 | return 1; |
342 | if (test__clzsi2(0x9D000000, 0)) |
343 | return 1; |
344 | if (test__clzsi2(0x9E000000, 0)) |
345 | return 1; |
346 | if (test__clzsi2(0x9F000000, 0)) |
347 | return 1; |
348 | if (test__clzsi2(0xA0000000, 0)) |
349 | return 1; |
350 | if (test__clzsi2(0xA1000000, 0)) |
351 | return 1; |
352 | if (test__clzsi2(0xA2000000, 0)) |
353 | return 1; |
354 | if (test__clzsi2(0xA3000000, 0)) |
355 | return 1; |
356 | if (test__clzsi2(0xA4000000, 0)) |
357 | return 1; |
358 | if (test__clzsi2(0xA5000000, 0)) |
359 | return 1; |
360 | if (test__clzsi2(0xA6000000, 0)) |
361 | return 1; |
362 | if (test__clzsi2(0xA7000000, 0)) |
363 | return 1; |
364 | if (test__clzsi2(0xA8000000, 0)) |
365 | return 1; |
366 | if (test__clzsi2(0xA9000000, 0)) |
367 | return 1; |
368 | if (test__clzsi2(0xAA000000, 0)) |
369 | return 1; |
370 | if (test__clzsi2(0xAB000000, 0)) |
371 | return 1; |
372 | if (test__clzsi2(0xAC000000, 0)) |
373 | return 1; |
374 | if (test__clzsi2(0xAD000000, 0)) |
375 | return 1; |
376 | if (test__clzsi2(0xAE000000, 0)) |
377 | return 1; |
378 | if (test__clzsi2(0xAF000000, 0)) |
379 | return 1; |
380 | if (test__clzsi2(0xB0000000, 0)) |
381 | return 1; |
382 | if (test__clzsi2(0xB1000000, 0)) |
383 | return 1; |
384 | if (test__clzsi2(0xB2000000, 0)) |
385 | return 1; |
386 | if (test__clzsi2(0xB3000000, 0)) |
387 | return 1; |
388 | if (test__clzsi2(0xB4000000, 0)) |
389 | return 1; |
390 | if (test__clzsi2(0xB5000000, 0)) |
391 | return 1; |
392 | if (test__clzsi2(0xB6000000, 0)) |
393 | return 1; |
394 | if (test__clzsi2(0xB7000000, 0)) |
395 | return 1; |
396 | if (test__clzsi2(0xB8000000, 0)) |
397 | return 1; |
398 | if (test__clzsi2(0xB9000000, 0)) |
399 | return 1; |
400 | if (test__clzsi2(0xBA000000, 0)) |
401 | return 1; |
402 | if (test__clzsi2(0xBB000000, 0)) |
403 | return 1; |
404 | if (test__clzsi2(0xBC000000, 0)) |
405 | return 1; |
406 | if (test__clzsi2(0xBD000000, 0)) |
407 | return 1; |
408 | if (test__clzsi2(0xBE000000, 0)) |
409 | return 1; |
410 | if (test__clzsi2(0xBF000000, 0)) |
411 | return 1; |
412 | if (test__clzsi2(0xC0000000, 0)) |
413 | return 1; |
414 | if (test__clzsi2(0xC1000000, 0)) |
415 | return 1; |
416 | if (test__clzsi2(0xC2000000, 0)) |
417 | return 1; |
418 | if (test__clzsi2(0xC3000000, 0)) |
419 | return 1; |
420 | if (test__clzsi2(0xC4000000, 0)) |
421 | return 1; |
422 | if (test__clzsi2(0xC5000000, 0)) |
423 | return 1; |
424 | if (test__clzsi2(0xC6000000, 0)) |
425 | return 1; |
426 | if (test__clzsi2(0xC7000000, 0)) |
427 | return 1; |
428 | if (test__clzsi2(0xC8000000, 0)) |
429 | return 1; |
430 | if (test__clzsi2(0xC9000000, 0)) |
431 | return 1; |
432 | if (test__clzsi2(0xCA000000, 0)) |
433 | return 1; |
434 | if (test__clzsi2(0xCB000000, 0)) |
435 | return 1; |
436 | if (test__clzsi2(0xCC000000, 0)) |
437 | return 1; |
438 | if (test__clzsi2(0xCD000000, 0)) |
439 | return 1; |
440 | if (test__clzsi2(0xCE000000, 0)) |
441 | return 1; |
442 | if (test__clzsi2(0xCF000000, 0)) |
443 | return 1; |
444 | if (test__clzsi2(0xD0000000, 0)) |
445 | return 1; |
446 | if (test__clzsi2(0xD1000000, 0)) |
447 | return 1; |
448 | if (test__clzsi2(0xD2000000, 0)) |
449 | return 1; |
450 | if (test__clzsi2(0xD3000000, 0)) |
451 | return 1; |
452 | if (test__clzsi2(0xD4000000, 0)) |
453 | return 1; |
454 | if (test__clzsi2(0xD5000000, 0)) |
455 | return 1; |
456 | if (test__clzsi2(0xD6000000, 0)) |
457 | return 1; |
458 | if (test__clzsi2(0xD7000000, 0)) |
459 | return 1; |
460 | if (test__clzsi2(0xD8000000, 0)) |
461 | return 1; |
462 | if (test__clzsi2(0xD9000000, 0)) |
463 | return 1; |
464 | if (test__clzsi2(0xDA000000, 0)) |
465 | return 1; |
466 | if (test__clzsi2(0xDB000000, 0)) |
467 | return 1; |
468 | if (test__clzsi2(0xDC000000, 0)) |
469 | return 1; |
470 | if (test__clzsi2(0xDD000000, 0)) |
471 | return 1; |
472 | if (test__clzsi2(0xDE000000, 0)) |
473 | return 1; |
474 | if (test__clzsi2(0xDF000000, 0)) |
475 | return 1; |
476 | if (test__clzsi2(0xE0000000, 0)) |
477 | return 1; |
478 | if (test__clzsi2(0xE1000000, 0)) |
479 | return 1; |
480 | if (test__clzsi2(0xE2000000, 0)) |
481 | return 1; |
482 | if (test__clzsi2(0xE3000000, 0)) |
483 | return 1; |
484 | if (test__clzsi2(0xE4000000, 0)) |
485 | return 1; |
486 | if (test__clzsi2(0xE5000000, 0)) |
487 | return 1; |
488 | if (test__clzsi2(0xE6000000, 0)) |
489 | return 1; |
490 | if (test__clzsi2(0xE7000000, 0)) |
491 | return 1; |
492 | if (test__clzsi2(0xE8000000, 0)) |
493 | return 1; |
494 | if (test__clzsi2(0xE9000000, 0)) |
495 | return 1; |
496 | if (test__clzsi2(0xEA000000, 0)) |
497 | return 1; |
498 | if (test__clzsi2(0xEB000000, 0)) |
499 | return 1; |
500 | if (test__clzsi2(0xEC000000, 0)) |
501 | return 1; |
502 | if (test__clzsi2(0xED000000, 0)) |
503 | return 1; |
504 | if (test__clzsi2(0xEE000000, 0)) |
505 | return 1; |
506 | if (test__clzsi2(0xEF000000, 0)) |
507 | return 1; |
508 | if (test__clzsi2(0xF0000000, 0)) |
509 | return 1; |
510 | if (test__clzsi2(0xF1000000, 0)) |
511 | return 1; |
512 | if (test__clzsi2(0xF2000000, 0)) |
513 | return 1; |
514 | if (test__clzsi2(0xF3000000, 0)) |
515 | return 1; |
516 | if (test__clzsi2(0xF4000000, 0)) |
517 | return 1; |
518 | if (test__clzsi2(0xF5000000, 0)) |
519 | return 1; |
520 | if (test__clzsi2(0xF6000000, 0)) |
521 | return 1; |
522 | if (test__clzsi2(0xF7000000, 0)) |
523 | return 1; |
524 | if (test__clzsi2(0xF8000000, 0)) |
525 | return 1; |
526 | if (test__clzsi2(0xF9000000, 0)) |
527 | return 1; |
528 | if (test__clzsi2(0xFA000000, 0)) |
529 | return 1; |
530 | if (test__clzsi2(0xFB000000, 0)) |
531 | return 1; |
532 | if (test__clzsi2(0xFC000000, 0)) |
533 | return 1; |
534 | if (test__clzsi2(0xFD000000, 0)) |
535 | return 1; |
536 | if (test__clzsi2(0xFE000000, 0)) |
537 | return 1; |
538 | if (test__clzsi2(0xFF000000, 0)) |
539 | return 1; |
540 | |
541 | if (test__clzsi2(0x00000001, 31)) |
542 | return 1; |
543 | if (test__clzsi2(0x00000002, 30)) |
544 | return 1; |
545 | if (test__clzsi2(0x00000004, 29)) |
546 | return 1; |
547 | if (test__clzsi2(0x00000008, 28)) |
548 | return 1; |
549 | if (test__clzsi2(0x00000010, 27)) |
550 | return 1; |
551 | if (test__clzsi2(0x00000020, 26)) |
552 | return 1; |
553 | if (test__clzsi2(0x00000040, 25)) |
554 | return 1; |
555 | if (test__clzsi2(0x00000080, 24)) |
556 | return 1; |
557 | if (test__clzsi2(0x00000100, 23)) |
558 | return 1; |
559 | if (test__clzsi2(0x00000200, 22)) |
560 | return 1; |
561 | if (test__clzsi2(0x00000400, 21)) |
562 | return 1; |
563 | if (test__clzsi2(0x00000800, 20)) |
564 | return 1; |
565 | if (test__clzsi2(0x00001000, 19)) |
566 | return 1; |
567 | if (test__clzsi2(0x00002000, 18)) |
568 | return 1; |
569 | if (test__clzsi2(0x00004000, 17)) |
570 | return 1; |
571 | if (test__clzsi2(0x00008000, 16)) |
572 | return 1; |
573 | if (test__clzsi2(0x00010000, 15)) |
574 | return 1; |
575 | if (test__clzsi2(0x00020000, 14)) |
576 | return 1; |
577 | if (test__clzsi2(0x00040000, 13)) |
578 | return 1; |
579 | if (test__clzsi2(0x00080000, 12)) |
580 | return 1; |
581 | if (test__clzsi2(0x00100000, 11)) |
582 | return 1; |
583 | if (test__clzsi2(0x00200000, 10)) |
584 | return 1; |
585 | if (test__clzsi2(0x00400000, 9)) |
586 | return 1; |
587 | |
588 | return 0; |
589 | } |
590 | |