|
|
1.1 root 1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <stdint.h>
4: #include "sys.h"
5:
1.1.1.2 ! root 6: static inline int cris_lz(int x)
1.1 root 7: {
8: int r;
9: asm ("lz\t%1, %0\n" : "=r" (r) : "r" (x));
10: return r;
11: }
12:
13: void check_lz(void)
14: {
15: int i;
16:
17: if (cris_lz(0) != 32)
18: err();
19: if (cris_lz(1) != 31)
20: err();
21: if (cris_lz(2) != 30)
22: err();
23: if (cris_lz(4) != 29)
24: err();
25: if (cris_lz(8) != 28)
26: err();
27:
28: /* try all positions with a single bit. */
29: for (i = 1; i < 32; i++) {
30: if (cris_lz(1 << (i-1)) != (32 - i))
31: err();
32: }
33:
34: /* try all positions with all bits. */
35: for (i = 1; i < 32; i++) {
36: /* split up this computation to clarify it. */
37: uint32_t val;
38: val = (unsigned int)-1 >> (32 - i);
39: if (cris_lz(val) != (32 - i))
40: err();
41: }
42: }
43:
44: int main(void)
45: {
46: check_lz();
47: pass();
48: exit(0);
49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.