qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

check_lz.c (775B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <stdint.h>
      4 #include "sys.h"
      5 
      6 static always_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 }