|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <stdlib.h> ! 3: #include <stdint.h> ! 4: #include "sys.h" ! 5: ! 6: extern inline int cris_lz(int x) ! 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.