diff options
author | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-08 13:32:20 +0000 |
---|---|---|
committer | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-08 13:32:20 +0000 |
commit | dd43edf4e136bff05cbbb6b42b96c024c591dbb9 (patch) | |
tree | d1f03b9c92753846ba462c5a1583af5106333d58 /tests/cris/check_lz.c | |
parent | 83fa1010ae342c5ad0392182fcdcce438c71b163 (diff) |
CRIS testsuite, based on the SIM testsuite, by Edgar E. Iglesias.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3365 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'tests/cris/check_lz.c')
-rw-r--r-- | tests/cris/check_lz.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/cris/check_lz.c b/tests/cris/check_lz.c new file mode 100644 index 0000000000..7b30a265ad --- /dev/null +++ b/tests/cris/check_lz.c @@ -0,0 +1,49 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include "sys.h" + +extern inline int cris_lz(int x) +{ + int r; + asm ("lz\t%1, %0\n" : "=r" (r) : "r" (x)); + return r; +} + +void check_lz(void) +{ + int i; + + if (cris_lz(0) != 32) + err(); + if (cris_lz(1) != 31) + err(); + if (cris_lz(2) != 30) + err(); + if (cris_lz(4) != 29) + err(); + if (cris_lz(8) != 28) + err(); + + /* try all positions with a single bit. */ + for (i = 1; i < 32; i++) { + if (cris_lz(1 << (i-1)) != (32 - i)) + err(); + } + + /* try all positions with all bits. */ + for (i = 1; i < 32; i++) { + /* split up this computation to clarify it. */ + uint32_t val; + val = (unsigned int)-1 >> (32 - i); + if (cris_lz(val) != (32 - i)) + err(); + } +} + +int main(void) +{ + check_lz(); + pass(); + exit(0); +} |