diff options
| author | fishsoupisgood <github@madingley.org> | 2019-04-29 01:17:54 +0100 | 
|---|---|---|
| committer | fishsoupisgood <github@madingley.org> | 2019-05-27 03:43:43 +0100 | 
| commit | 3f2546b2ef55b661fd8dd69682b38992225e86f6 (patch) | |
| tree | 65ca85f13617aee1dce474596800950f266a456c /tests/tcg/openrisc | |
| download | qemu-master.tar.gz qemu-master.tar.bz2 qemu-master.zip  | |
Diffstat (limited to 'tests/tcg/openrisc')
52 files changed, 2583 insertions, 0 deletions
diff --git a/tests/tcg/openrisc/Makefile b/tests/tcg/openrisc/Makefile new file mode 100644 index 00000000..7e658887 --- /dev/null +++ b/tests/tcg/openrisc/Makefile @@ -0,0 +1,71 @@ +-include ../../config-host.mak + +CROSS = or32-linux- + +SIM = qemu-or32 + +CC = $(CROSS)gcc + +TESTCASES = test_add.tst +TESTCASES += test_sub.tst +TESTCASES += test_addc.tst +TESTCASES += test_addi.tst +TESTCASES += test_addic.tst +TESTCASES += test_and_or.tst +TESTCASES += test_bf.tst +TESTCASES += test_bnf.tst +TESTCASES += test_div.tst +TESTCASES += test_divu.tst +TESTCASES += test_extx.tst +TESTCASES += test_fx.tst +TESTCASES += test_jal.tst +TESTCASES += test_j.tst +TESTCASES += test_lf_div.tst +TESTCASES += test_lf_eqs.tst +TESTCASES += test_lf_ges.tst +TESTCASES += test_lf_gts.tst +TESTCASES += test_lf_les.tst +TESTCASES += test_lf_lts.tst +TESTCASES += test_lf_mul.tst +TESTCASES += test_lf_nes.tst +TESTCASES += test_lf_rem.tst +TESTCASES += test_lf_sub.tst +TESTCASES += test_lf_add.tst +TESTCASES += test_logic.tst +TESTCASES += test_lx.tst +TESTCASES += test_movhi.tst +TESTCASES += test_mul.tst +TESTCASES += test_mulu.tst +TESTCASES += test_muli.tst +TESTCASES += test_sfeq.tst +TESTCASES += test_sfeqi.tst +TESTCASES += test_sfges.tst +TESTCASES += test_sfgesi.tst +TESTCASES += test_sfgeu.tst +TESTCASES += test_sfgeui.tst +TESTCASES += test_sfgts.tst +TESTCASES += test_sfgtsi.tst +TESTCASES += test_sfgtu.tst +TESTCASES += test_sfgtui.tst +TESTCASES += test_sfles.tst +TESTCASES += test_sflesi.tst +TESTCASES += test_sfleu.tst +TESTCASES += test_sfleui.tst +TESTCASES += test_sflts.tst +TESTCASES += test_sfltsi.tst +TESTCASES += test_sfltu.tst +TESTCASES += test_sfltui.tst +TESTCASES += test_sfne.tst +TESTCASES += test_sfnei.tst + +all: $(TESTCASES) + +%.tst: %.c +	$(CC) -static $< -o $@ + + +check: $(TESTCASES) +	@for case in $(TESTCASES); do $(SIM) $$case; echo $$case pass!; sleep 0.2; done + +clean: +	$(RM) -rf $(TESTCASES) diff --git a/tests/tcg/openrisc/test_add.c b/tests/tcg/openrisc/test_add.c new file mode 100644 index 00000000..3d23592e --- /dev/null +++ b/tests/tcg/openrisc/test_add.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, d; +    int result; + +    a = 0x100; +    b = 0x100; +    result = 0x200; +    __asm +    ("l.add %0, %0, %1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("add error\n"); +        return -1; +    } + +    a = 0xffff; +    b = 0x1; +    result = 0x10000; +    __asm +    ("l.add %0, %0, %1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("add error\n"); +        return -1; +    } + +    a = 0x7fffffff; +    b = 0x1; +    __asm +    ("l.add %0, %1, %2\n\t" +     : "=r"(d) +     : "r"(b), "r"(a) +    ); + +    return 0; +} diff --git a/tests/tcg/openrisc/test_addc.c b/tests/tcg/openrisc/test_addc.c new file mode 100644 index 00000000..a8f756a6 --- /dev/null +++ b/tests/tcg/openrisc/test_addc.c @@ -0,0 +1,40 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x01; +    c = 0xffffffff; +    result = 0; +    __asm +    ("l.add r1, r1, r0\n\t" /* clear carry */ +     "l.addc   %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("first addc error\n"); +        return -1; +    } + +    b = 0x01; +    c = 0xffffffff; +    result = 0x80000001; +    __asm +    ("l.add r1, r1, r0\n\t" /* clear carry */ +     "l.addc   %0, %1, %2\n\t" +     "l.movhi  %2, 0x7fff\n\t" +     "l.ori    %2, %2, 0xffff\n\t" +     "l.addc   %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("addc error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_addi.c b/tests/tcg/openrisc/test_addi.c new file mode 100644 index 00000000..bbf5a5ff --- /dev/null +++ b/tests/tcg/openrisc/test_addi.c @@ -0,0 +1,33 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    b = 0x01; +    result = 0x00; +    __asm +    ("l.addi  %0, %1, 0xffff\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("addi error\n\t"); +        return -1; +    } + +    b = 0x010000; +    result = 0xffff; +    __asm +    ("l.addi  %0, %1, 0xffff\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("addi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_addic.c b/tests/tcg/openrisc/test_addic.c new file mode 100644 index 00000000..857aaa13 --- /dev/null +++ b/tests/tcg/openrisc/test_addic.c @@ -0,0 +1,35 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    a = 1; +    result = 0x0; +    __asm +    ("l.add r1, r1, r0\n\t" /* clear carry */ +     "l.addic %0, %0, 0xffff\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("first addic error\n"); +        return -1; +   } + +    a = -1; +    result = 0x201; +    __asm +    ("l.add r1, r1, r0\n\t"  /* clear carry */ +     "l.addic %0, %0, 0x1\n\t" +     "l.ori   %0, r0, 0x100\n\t" +     "l.addic %0, %0, 0x100\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("second addic error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_and_or.c b/tests/tcg/openrisc/test_and_or.c new file mode 100644 index 00000000..810d868c --- /dev/null +++ b/tests/tcg/openrisc/test_and_or.c @@ -0,0 +1,65 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x2; +    c = 0x1; +    result = 0; +    __asm +    ("l.and  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("and error\n"); +        return -1; +    } + +    result = 0x2; +    __asm +    ("l.andi  %0, %1, 0x3\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("andi error %x\n", a); +        return -1; +    } + +    result = 0x3; +    __asm +    ("l.or   %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("or error\n"); +        return -1; +    } + +    result = 0x3; +    __asm +    ("l.xor  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("xor error\n"); +        return -1; +    } + +    __asm +    ("l.xori  %0, %1, 0x1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("xori error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_bf.c b/tests/tcg/openrisc/test_bf.c new file mode 100644 index 00000000..79f3fb99 --- /dev/null +++ b/tests/tcg/openrisc/test_bf.c @@ -0,0 +1,47 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    a = 0; +    b = 10; +    c = 11; +    result = 0x2; +    __asm +    ("1:\n\t" +     "l.addi %1, %1, 0x01\n\t" +     "l.addi %0, %0, 0x01\n\t" +     "l.sfeq %1, %2\n\t" +     "l.bf   1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfeq error\n"); +        return -1; +    } + +    a = 0x00; +    b = 0x11; +    c = 0x11; +    result = 0x01; +    __asm +    ("1:\n\t" +     "l.addi %1, %1, 0x01\n\t" +     "l.addi %0, %0, 0x01\n\t" +     "l.sfeq %1, %2\n\t" +     "l.bf   1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfeq error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_bnf.c b/tests/tcg/openrisc/test_bnf.c new file mode 100644 index 00000000..f716215f --- /dev/null +++ b/tests/tcg/openrisc/test_bnf.c @@ -0,0 +1,51 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 0; +    result = 0x3; +    __asm +    ("l.sfeqi %1, 0x0\n\t" +     "l.bnf 1f\n\t" +     "l.nop\n\t" +     "\n\t" +     "l.addi %0, %0, 0x1\n\t" +     "l.addi %0, %0, 0x1\n\t" +     "\n\t" +     "1:\n\t" +     "l.addi %0, %0, 0x1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("l.bnf error\n"); +        return -1; +    } + +    a = 0; +    b = 0; +    result = 1; +    __asm +    ("l.sfeqi %1, 0x1\n\t" +     "l.bnf 1f\n\t" +     "l.nop\n\t" +     "\n\t" +     "l.addi %0, %0, 0x1\n\t" +     "l.addi %0, %0, 0x1\n\t" +     "\n\t" +     "1:\n\t" +     "l.addi %0, %0, 0x1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("l.bnf error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_div.c b/tests/tcg/openrisc/test_div.c new file mode 100644 index 00000000..9b65f6e6 --- /dev/null +++ b/tests/tcg/openrisc/test_div.c @@ -0,0 +1,54 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x120; +    c = 0x4; +    result = 0x48; +    __asm +    ("l.div  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("div error\n"); +        return -1; +    } + +    result = 0x4; +    __asm +    ("l.div %0, %1, %0\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("div error\n"); +        return -1; +    } + +    b = 0xffffffff; +    c = 0x80000000; +    result = 0; +    __asm +    ("l.div %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("div error\n"); +        return -1; +    } + +    b = 0x80000000; +    c = 0xffffffff; +    __asm +    ("l.div %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); + +    return 0; +} diff --git a/tests/tcg/openrisc/test_divu.c b/tests/tcg/openrisc/test_divu.c new file mode 100644 index 00000000..bff9e3ea --- /dev/null +++ b/tests/tcg/openrisc/test_divu.c @@ -0,0 +1,34 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x120; +    c = 0x4; +    result = 0x48; + +    __asm +    ("l.divu  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("divu error\n"); +        return -1; +    } + +    result = 0x4; +    __asm +    ("l.divu %0, %1, %0\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("divu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_extx.c b/tests/tcg/openrisc/test_extx.c new file mode 100644 index 00000000..09221484 --- /dev/null +++ b/tests/tcg/openrisc/test_extx.c @@ -0,0 +1,78 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    b = 0x83; +    result = 0xffffff83; +    __asm +    ("l.extbs  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("extbs error\n"); +        return -1; +    } + +    result = 0x83; +    __asm +    ("l.extbz  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("extbz error\n"); +        return -1; +    } + +    b = 0x8083; +    result = 0xffff8083; +    __asm +    ("l.exths  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("exths error\n"); +        return -1; +    } + +    result = 0x8083; +    __asm +    ("l.exthz  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("exthz error\n"); +        return -1; +    } + +    b = 0x11; +    result = 0x11; +    __asm +    ("l.extws  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); + +    if (a != result) { +        printf("extws error\n"); +        return -1; +    } + +    __asm +    ("l.extwz  %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("extwz error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_fx.c b/tests/tcg/openrisc/test_fx.c new file mode 100644 index 00000000..df86000d --- /dev/null +++ b/tests/tcg/openrisc/test_fx.c @@ -0,0 +1,57 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    b = 0x123; +    result = 1; +    __asm +    ("l.ff1 %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("ff1 error\n"); +        return -1; +    } + +    b = 0x0; +    result = 0; +    __asm +    ("l.ff1 %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("ff1 error\n"); +        return -1; +    } + +    b = 0x123; +    result = 9; +    __asm +    ("l.fl1 %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("fl1 error\n"); +        return -1; +    } + +    b = 0x0; +    result = 0; +    __asm +    ("l.fl1 %0, %1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("fl1 error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_j.c b/tests/tcg/openrisc/test_j.c new file mode 100644 index 00000000..9ddf8bfb --- /dev/null +++ b/tests/tcg/openrisc/test_j.c @@ -0,0 +1,26 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 2; +    __asm +    ("l.addi %0, %0, 1\n\t" +     "l.j j\n\t" +     "l.nop\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.nop\n\t" +     "j:\n\t" +     "l.addi %0, %0, 1\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("j error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_jal.c b/tests/tcg/openrisc/test_jal.c new file mode 100644 index 00000000..7e2da401 --- /dev/null +++ b/tests/tcg/openrisc/test_jal.c @@ -0,0 +1,26 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 2; +    __asm +    ("l.addi %0, %0, 1\n\t" +     "l.jal jal\n\t" +     "l.nop\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.nop\n\t" +     "jal:\n\t" +     "l.addi %0, %0, 1\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("jal error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_add.c b/tests/tcg/openrisc/test_lf_add.c new file mode 100644 index 00000000..e00212da --- /dev/null +++ b/tests/tcg/openrisc/test_lf_add.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    float a, b; +    float res2; + +    a = 1.5; +    b = 2.5; +    res2 = 4.0; +    __asm +    ("lf.add.s  %0, %0, %1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != res2) { +        printf("lf.add.s error, %f\n", a); +        return -1; +    } + +/*    double c, d; +    double res1; + +    c = 1.5; +    d = 1.5; +    res1 = 3.00; +    __asm +    ("lf.add.d  %0, %1, %2\n\t" +     : "+r"(c) +     : "r"(d) +    ); + +    if ((e - res1) > 0.002) { +        printf("lf.add.d error, %f\n", e - res1); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_div.c b/tests/tcg/openrisc/test_lf_div.c new file mode 100644 index 00000000..70b5d1c1 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_div.c @@ -0,0 +1,37 @@ +#include <stdio.h> + +int main(void) +{ +    float a, b, c; +    float result; + +    b = 1.5; +    c = 0.5; +    result = 3.0; +    __asm +    ("lf.div.s    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.div.s error\n"); +        return -1; +    } + +/*    double a, b, c, res; + +    b = 0x80000000; +    c = 0x40; +    result = 0x2000000; +    __asm +    ("lf.div.d    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.div.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_eqs.c b/tests/tcg/openrisc/test_lf_eqs.c new file mode 100644 index 00000000..a176bd6f --- /dev/null +++ b/tests/tcg/openrisc/test_lf_eqs.c @@ -0,0 +1,88 @@ +#include <stdio.h> + +int main(void) +{ +    int a, result; +    float b, c; + +    a = 0x1; +    b = 122.5; +    c = 123.5; +    result = 0x3; +    __asm +    ("lfeqd:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfeq.s %1, %2\n\t" +     "l.bf      lfeqd\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfeq.s error\n"); +        return -1; +    } + +    b = 13.5; +    c = 13.5; +    result = 0x3; +    __asm +    ("lf.sfeq.s %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    r4, r4, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfeq.s error\n"); +        return -1; +    } + +/*    double b, c; +    double result; +    int a; + +    a = 0x1; +    b = 122.5; +    c = 133.5; +    result = 0x3; + +    __asm +    ("lfeqd:\n\t" +     "l.addi %0, %0, 0x1\n\t" +     "lf.sfeq.d %1, %2\n\t" +     "l.bf      lfeqd\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfeq.d error\n"); +        return -1; +    } + +    double c, d, res; +    int e = 0; +    c = 11.5; +    d = 11.5; +    res = 1; +    __asm +    ("lf.sfeq.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(e) +     : "r"(c), "r"(d) +    ); +    if (e != res) { +        printf("lf.sfeq.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_ges.c b/tests/tcg/openrisc/test_lf_ges.c new file mode 100644 index 00000000..98e7f50b --- /dev/null +++ b/tests/tcg/openrisc/test_lf_ges.c @@ -0,0 +1,88 @@ +#include <stdio.h> + +int main(void) +{ +    int a, result; +    float b, c; + +    a = 0; +    b = 122.5; +    c = 123.5; +    result = 0x1; +    __asm +    ("lfges:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfge.s %1, %2\n\t" +     "l.bf      lfges\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfge.s error\n"); +        return -1; +    } + +    b = 133.5; +    c = 13.5; +    result = 0x3; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfge.s %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfge.s error\n"); +        return -1; +    } + +/*    int a, result; +    double b, c; + +    a = 0x1; +    b = 122.5; +    c = 123.5; +    result = 0x2; +    __asm +    ("lfged:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfge.d %1, %2\n\t" +     "l.bf      lfged\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfge.d error\n"); +        return -1; +    } + +    b = 133.5; +    c = 13.5; +    result = 0x4; +    __asm +    ("lf.sfge.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfge.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_gts.c b/tests/tcg/openrisc/test_lf_gts.c new file mode 100644 index 00000000..f3df2795 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_gts.c @@ -0,0 +1,86 @@ +#include <stdio.h> + +int main(void) +{ +    int a, result; +    float b, c; + +    a = 0; +    b = 122.5; +    c = 123.5; +    result = 0x1; +    __asm +    ("lfgts:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfgt.s %1, %2\n\t" +     "l.bf      lfgts\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfgt.s error\n"); +        return -1; +    } + +    b = 133.5; +    c = 13.5; +    result = 0x1; +    __asm +    ("lf.sfgt.s %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfgt.s error\n"); +        return -1; +    } + +/*    int a, result; +    double b, c; + +    a = 0; +    b = 122.5; +    c = 123.5; +    result = 0x1; +    __asm +    ("lfgtd:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfgt.d %1, %2\n\t" +     "l.bf      lfgtd\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfgt.d error\n"); +        return -1; +    } + +    b = 133.5; +    c = 13.5; +    result = 0x3; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfgt.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfgt.d error, %x\n", a); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_les.c b/tests/tcg/openrisc/test_lf_les.c new file mode 100644 index 00000000..046c511d --- /dev/null +++ b/tests/tcg/openrisc/test_lf_les.c @@ -0,0 +1,88 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    float b, c; +    int result; + +    a = 0; +    b = 1234.2; +    c = 12.4; +    result = 0x1; +    __asm +    ("lfles:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfle.s %1, %2\n\t" +     "l.bf      lfles\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfle.s error\n"); +        return -1; +    } + +    b = 1.1; +    c = 19.4; +    result = 0x3; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfle.s %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfle.s error\n"); +        return -1; +    } + +/*    int a; +    double b, c; +    int result; + +    a = 0; +    b = 1212.5; +    c = 123.5; +    result = 0x1; +    __asm +    ("lfled:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfle.d %1, %2\n\t" +     "l.bf      lfled\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfle.d error\n"); +        return -1; +    } + +    b = 13.5; +    c = 113.5; +    result = 0x2; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "lf.sfle.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfle.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_lts.c b/tests/tcg/openrisc/test_lf_lts.c new file mode 100644 index 00000000..fa56721d --- /dev/null +++ b/tests/tcg/openrisc/test_lf_lts.c @@ -0,0 +1,92 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    float b, c, d; +    int result; + +    a = 0; +    b = 124.5; +    c = 1.4; +    result = 1; +    __asm +    ("lfltd:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sflt.s %1, %2\n\t" +     "l.bf      lfltd\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sflt.s error\n"); +        return -1; +    } + +    a = 0; +    b = 11.1; +    c = 13.1; +    d = 1.0; +    result = 2; +    __asm +    ("1:\n\t" +     "lf.add.s  %1, %1, %3\n\t" +     "l.addi    %0, %0, 1\n\t" +     "lf.sflt.s %1, %2\n\t" +     "l.bf      1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c), "r"(d) +    ); +    if (a != result) { +        printf("lf.sflt.s error\n"); +        return -1; +    } + +/*    int a; +    double b, c; +    int result; + +    a = 0; +    b = 1432.1; +    c = 2.4; +    result = 0x1; +    __asm +    ("lfltd:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sflt.d %1, %2\n\t" +     "l.bf      lfltd\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sflt.d error\n"); +        return -1; +    } + +    a = 0; +    b = 1.1; +    c = 19.7; +    result = 2; +    __asm +    ("lf.sflt.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.addi %0, %0, 1\n\t" +     "1:\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.addi %0, %0, 1\n\t" +     : "+r"(a), "+r"(b) +     : "r"(c) +    ); +    if (a != result) { +        printf("lf.sflt.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_mul.c b/tests/tcg/openrisc/test_lf_mul.c new file mode 100644 index 00000000..bc8ad800 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_mul.c @@ -0,0 +1,22 @@ +#include <stdio.h> + +int main(void) +{ +    float a, b, c; +    float result; + +    b = 1.5; +    c = 4.0; +    result = 6.0; +    __asm +    ("lf.mul.s   %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.mul.s error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_nes.c b/tests/tcg/openrisc/test_lf_nes.c new file mode 100644 index 00000000..61363100 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_nes.c @@ -0,0 +1,89 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    float b, c; +    int result; + +    a = 0; +    b = 23.1; +    c = 23.1; +    result = 0x1; +    __asm +    ("lfnes:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfne.s %1, %2\n\t" +     "l.bf      lfnes\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfne.s error"); +        return -1; +    } + +    b = 12.4; +    c = 7.8; +    result = 0x3; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfne.s %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfne.s error\n"); +        return -1; +    } +/*    int a; +    double b, c; +    int result; + +    a = 0; +    b = 124.3; +    c = 124.3; +    result = 0x1; +    __asm +    ("lfned:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfne.d %1, %2\n\t" +     "l.bf      lfned\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfne.d error\n"); +        return -1; +    } + +    b = 11.5; +    c = 16.7; +    result = 0x3; +    __asm +    ("l.addi    %0, %0, 0x1\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "lf.sfne.d %1, %2\n\t" +     "l.bf      1f\n\t" +     "l.nop\n\t" +     "l.addi    r4, r4, 0x1\n\t" +     "l.addi    r4, r4, 0x1\n\t" +     "1:\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sfne.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_rem.c b/tests/tcg/openrisc/test_lf_rem.c new file mode 100644 index 00000000..bd6090d6 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_rem.c @@ -0,0 +1,32 @@ +#include <stdio.h> + +int main(void) +{ +    float a, b, c; +    float result; + +    b = 101.5; +    c = 10; +    result = 1.5; +/*    __asm +    ("lf.rem.d      %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.rem.d error\n"); +        return -1; +    }*/ + +    __asm +    ("lf.rem.s      %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.rem.s error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lf_sub.c b/tests/tcg/openrisc/test_lf_sub.c new file mode 100644 index 00000000..5ee9b039 --- /dev/null +++ b/tests/tcg/openrisc/test_lf_sub.c @@ -0,0 +1,35 @@ +#include <stdio.h> + +int main(void) +{ +    float a, b, c; +    float result; + +    b = 10.5; +    c = 1.5; +    result = 9.0; +    __asm +    ("lf.sub.s  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sub.s error\n"); +        return -1; +    } + +/*    b = 0x999; +    c = 0x654; +    result = 0x345; +    __asm +    ("lf.sub.d  %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("lf.sub.d error\n"); +        return -1; +    }*/ + +    return 0; +} diff --git a/tests/tcg/openrisc/test_logic.c b/tests/tcg/openrisc/test_logic.c new file mode 100644 index 00000000..46d173f4 --- /dev/null +++ b/tests/tcg/openrisc/test_logic.c @@ -0,0 +1,105 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x9743; +    c = 0x2; +    result = 0x25d0c; +    __asm +    ("l.sll    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sll error\n"); +        return -1; +    } + +    b = 0x9743; +    result = 0x25d0c; +    __asm +    ("l.slli   %0, %1, 0x2\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("slli error\n"); +        return -1; +    } + +    b = 0x7654; +    c = 0x03; +    result = 0xeca; +    __asm +    ("l.srl    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); + +    b = 0x7654; +    result = 0xeca; +    __asm +    ("l.srli   %0, %1, 0x3\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("srli error\n"); +        return -1; +    } + +    b = 0x80000001; +    c = 0x4; +    result = 0x18000000; +    __asm +    ("l.ror    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("ror error\n"); +        return -1; +    } + +    b = 0x80000001; +    result = 0x18000000; +    __asm +    ("l.rori   %0, %1, 0x4\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("rori error\n"); +        return -1; +    } + +    b = 0x80000001; +    c = 0x03; +    result = 0xf0000000; +    __asm +    ("l.sra    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sra error\n"); +        return -1; +    } + +    b = 0x80000001; +    result = 0xf0000000; +    __asm +    ("l.srai   %0, %1, 0x3\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("srai error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_lx.c b/tests/tcg/openrisc/test_lx.c new file mode 100644 index 00000000..792e3d5c --- /dev/null +++ b/tests/tcg/openrisc/test_lx.c @@ -0,0 +1,84 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int p[50]; +    int result; + +    result = 0x23; +    __asm +    ("l.ori r8, r0, 0x123\n\t" +     "l.sb  0x4 + %1, r8\n\t" +     "\n\t" +     "l.lbz %0, 0x4 + %1\n\t" +     : "=r"(a), "+m"(*p) +    ); +    if (a != result) { +        printf("lbz error, %x\n", a); +        return -1; +    } + +    result = 0x23; +    __asm +    ("l.lbs %0, 0x4 + %1\n\t" +     : "=r"(a) +     : "m"(*p) +    ); +    if (a != result) { +        printf("lbs error\n"); +        return -1; +    } + +    result = 0x1111; +    __asm +    ("l.ori r8, r0, 0x1111\n\t" +     "l.sh  0x20 + %1, r8\n\t" +     "\n\t" +     "l.lhs %0, 0x20 + %1\n\t" +     : "=r"(a), "=m"(*p) +    ); +    if (a != result) { +        printf("lhs error, %x\n", a); +        return -1; +    } + +    result = 0x1111; +    __asm +    ("l.lhz %0, 0x20 + %1\n\t" +     : "=r"(a) +     : "m"(*p) +    ); +    if (a != result) { +        printf("lhz error\n"); +        return -1; +    } + +    result = 0x1111233; +    __asm +    ("l.ori r8, r0, 0x1233\n\t" +     "l.movhi r1, 0x111\n\t" +     "l.or  r8, r8, r1\n\t" +     "l.sw  0x123 + %1, r8\n\t" +     "\n\t" +     "l.lws %0, 0x123 + %1\n\t" +     : "=r"(a), "+m"(*p) +    ); +    if (a != result) { +        printf("lws error, %x\n", a); +        return -1; +    } + +    result = 0x1111233; +    __asm +    ("l.lwz %0, 0x123 + %1\n\t" +     : "=r"(a) +     : "m"(*p) +    ); +    if (a != result) { +        printf("lwz error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_movhi.c b/tests/tcg/openrisc/test_movhi.c new file mode 100644 index 00000000..737f75b9 --- /dev/null +++ b/tests/tcg/openrisc/test_movhi.c @@ -0,0 +1,31 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    result = 0x1222; +    __asm +    ("l.movhi r3, 0x1222\n\t" +     "l.srli   %0, r3, 16\n\t" +     : "=r"(a) +    ); +    if (a != result) { +        printf("movhi error\n"); +        return -1; +    } + +    result = 0x1111; +    __asm +    ("l.movhi r8, 0x1111\n\t" +     "l.srli   %0, r8, 16\n\t" +     : "=r"(a) +    ); +    if (a != result) { +        printf("movhi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_mul.c b/tests/tcg/openrisc/test_mul.c new file mode 100644 index 00000000..130101fd --- /dev/null +++ b/tests/tcg/openrisc/test_mul.c @@ -0,0 +1,61 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x4; +    c = 0x1; +    result = 0x4; +    __asm +    ("l.mul    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mul error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0x0; +    result = 0x0; +    __asm +    ("l.mul    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mul error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0xff; +    result = 0xff; +    __asm +    ("l.mul    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mul error\n"); +        return -1; +    } + +    b = 0x7fffffff; +    c = 0x2; +    result = 0xfffffffe; +    __asm +    ("l.mul    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mul error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_muli.c b/tests/tcg/openrisc/test_muli.c new file mode 100644 index 00000000..f1042e98 --- /dev/null +++ b/tests/tcg/openrisc/test_muli.c @@ -0,0 +1,48 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x4; +    c = 0x1; +    result = 0x4; +    __asm +    ("l.muli    %0, %1, 0x1\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("muli error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0x0; +    result = 0x0; +    __asm +    ("l.muli    %0, %1, 0x0\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("muli error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0xff; +    result = 0xff; +    __asm +    ("l.muli    %0, %1, 0xff\n\t" +     : "=r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("muli error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_mulu.c b/tests/tcg/openrisc/test_mulu.c new file mode 100644 index 00000000..2d1e97d1 --- /dev/null +++ b/tests/tcg/openrisc/test_mulu.c @@ -0,0 +1,48 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    b = 0x4; +    c = 0x1; +    result = 0x4; +    __asm +    ("l.mulu    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mulu error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0x0; +    result = 0x0; +    __asm +    ("l.mulu    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mulu error\n"); +        return -1; +    } + +    b = 0x1; +    c = 0xff; +    result = 0xff; +    __asm +    ("l.mulu    %0, %1, %2\n\t" +     : "=r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("mulu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfeq.c b/tests/tcg/openrisc/test_sfeq.c new file mode 100644 index 00000000..bd7f875b --- /dev/null +++ b/tests/tcg/openrisc/test_sfeq.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0x1; +    b = 0x80; +    result = 0x2; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 0x1\n\t" +     "l.sfeq   %0, %1\n\t" +     "l.bf     1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfeq error\n"); +        return -1; +    } + +    a = 0x7f; +    b = 0x80; +    result = 0x81; +    __asm +    ("2:\n\t" +     "l.addi   %0, %0, 0x1\n\t" +     "l.sfeq   %0, %1\n\t" +     "l.bf     2b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfeq error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfeqi.c b/tests/tcg/openrisc/test_sfeqi.c new file mode 100644 index 00000000..57426132 --- /dev/null +++ b/tests/tcg/openrisc/test_sfeqi.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 1; +    result = 2; +    __asm +    ("1:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.sfeqi   %0, 0x80\n\t" +     "l.bf      1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfeqi error\n"); +        return -1; +    } + +    a = 0x7f; +    result = 0x81; +    __asm +    ("2:\n\t" +     "l.addi    %0, %0, 0x1\n\t" +     "l.sfeqi   %0, 0x80\n\t" +     "l.bf      2b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfeqi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfges.c b/tests/tcg/openrisc/test_sfges.c new file mode 100644 index 00000000..23761d7f --- /dev/null +++ b/tests/tcg/openrisc/test_sfges.c @@ -0,0 +1,44 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    a = 0; +    b = 3; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfges  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfges error\n"); +        return -1; +    } + +    a = 0xff; +    b = 3; +    c = 0x1; +    result = 2; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %2\n\t" +     "l.sfges  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfges error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgesi.c b/tests/tcg/openrisc/test_sfgesi.c new file mode 100644 index 00000000..54a2d51c --- /dev/null +++ b/tests/tcg/openrisc/test_sfgesi.c @@ -0,0 +1,40 @@ +#include <stdio.h> +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgesi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfgesi error\n"); +        return -1; +    } + +    a = 0xff; +    b = 1; +    result = 2; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %1\n\t" +     "l.sfgesi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgesi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgeu.c b/tests/tcg/openrisc/test_sfgeu.c new file mode 100644 index 00000000..2a491d91 --- /dev/null +++ b/tests/tcg/openrisc/test_sfgeu.c @@ -0,0 +1,44 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    a = 0; +    b = 3; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgeu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgeu error\n"); +        return -1; +    } + +    a = 0xff; +    b = 3; +    c = 1; +    result = 2; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %2\n\t" +     "l.sfgeu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfgeu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgeui.c b/tests/tcg/openrisc/test_sfgeui.c new file mode 100644 index 00000000..40af35c6 --- /dev/null +++ b/tests/tcg/openrisc/test_sfgeui.c @@ -0,0 +1,41 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgeui %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfgeui error\n"); +        return -1; +    } + +    a = 0xff; +    b = 1; +    result = 2; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %1\n\t" +     "l.sfgeui %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgeui error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgts.c b/tests/tcg/openrisc/test_sfgts.c new file mode 100644 index 00000000..4481a9cc --- /dev/null +++ b/tests/tcg/openrisc/test_sfgts.c @@ -0,0 +1,45 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b, c; +    int result; + +    a = 0; +    b = 3; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgts  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgts error\n"); +        return -1; +    } + + +    a = 0xff; +    b = 3; +    c = 1; +    result = 3; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %2\n\t" +     "l.sfgts  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfgts error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgtsi.c b/tests/tcg/openrisc/test_sfgtsi.c new file mode 100644 index 00000000..7366e129 --- /dev/null +++ b/tests/tcg/openrisc/test_sfgtsi.c @@ -0,0 +1,41 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgtsi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfgtsi error\n"); +        return -1; +    } + +    a = 0xff; +    b = 1; +    result = 3; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %1\n\t" +     "l.sfgtsi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgtsi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgtu.c b/tests/tcg/openrisc/test_sfgtu.c new file mode 100644 index 00000000..da286891 --- /dev/null +++ b/tests/tcg/openrisc/test_sfgtu.c @@ -0,0 +1,43 @@ +#include <stdio.h> +int main(void) +{ +    int a, b, c; +    int result; + +    a = 0; +    b = 3; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi %0, %0, 1\n\t" +     "l.sfgtu %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgtu error\n"); +        return -1; +    } + +    a = 0xff; +    b = 3; +    c = 1; +    result = 3; +    __asm +    ("1:\n\t" +     "l.sub    %0, %0, %2\n\t" +     "l.sfgtu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b), "r"(c) +    ); +    if (a != result) { +        printf("sfgtu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfgtui.c b/tests/tcg/openrisc/test_sfgtui.c new file mode 100644 index 00000000..565d44f1 --- /dev/null +++ b/tests/tcg/openrisc/test_sfgtui.c @@ -0,0 +1,42 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    result = 1; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfgtui %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfgtui error\n"); +        return -1; +    } + + +    a = 0xff; +    b = 1; +    result = 3; +    __asm +    ("1:\n\t" +     "l.sub     %0, %0, %1\n\t" +     "l.sfgtui  %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfgtui error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfles.c b/tests/tcg/openrisc/test_sfles.c new file mode 100644 index 00000000..f5735228 --- /dev/null +++ b/tests/tcg/openrisc/test_sfles.c @@ -0,0 +1,26 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 3; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfles  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfles error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sflesi.c b/tests/tcg/openrisc/test_sflesi.c new file mode 100644 index 00000000..16fe6053 --- /dev/null +++ b/tests/tcg/openrisc/test_sflesi.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sflesi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sflesi error\n"); +        return -1; +    } + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sflesi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sflesi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfleu.c b/tests/tcg/openrisc/test_sfleu.c new file mode 100644 index 00000000..be0a3c3f --- /dev/null +++ b/tests/tcg/openrisc/test_sfleu.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 3; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfleu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfleu error\n"); +        return -1; +    } + +    a = 0; +    b = 3; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfleu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfleu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfleui.c b/tests/tcg/openrisc/test_sfleui.c new file mode 100644 index 00000000..38d3c897 --- /dev/null +++ b/tests/tcg/openrisc/test_sfleui.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfleui %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfleui error\n"); +        return -1; +    } + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfleui %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfleui error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sflts.c b/tests/tcg/openrisc/test_sflts.c new file mode 100644 index 00000000..7deeb48d --- /dev/null +++ b/tests/tcg/openrisc/test_sflts.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 3; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sflts  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sflts error\n"); +        return -1; +    } + +    a = 0; +    b = 3; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi    %0, %0, 1\n\t" +     "l.sflts   %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sflts error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfltsi.c b/tests/tcg/openrisc/test_sfltsi.c new file mode 100644 index 00000000..3cb1f028 --- /dev/null +++ b/tests/tcg/openrisc/test_sfltsi.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfltsi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfltsi error\n"); +        return -1; +    } + +    a = 0; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi    %0, %0, 1\n\t" +     "l.sfltsi  %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfltsi error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfltu.c b/tests/tcg/openrisc/test_sfltu.c new file mode 100644 index 00000000..7ed3b268 --- /dev/null +++ b/tests/tcg/openrisc/test_sfltu.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 3; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfltu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfltu error\n"); +        return -1; +    } + +    a = 0; +    b = 3; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi    %0, %0, 1\n\t" +     "l.sfltu  %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfltu error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfltui.c b/tests/tcg/openrisc/test_sfltui.c new file mode 100644 index 00000000..a5cb9f6a --- /dev/null +++ b/tests/tcg/openrisc/test_sfltui.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 4; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 4\n\t" +     "l.sfltsi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfltui error\n"); +        return -1; +    } + +    a = 0; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi    %0, %0, 1\n\t" +     "l.sfltsi %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfltui error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfne.c b/tests/tcg/openrisc/test_sfne.c new file mode 100644 index 00000000..b33a35cf --- /dev/null +++ b/tests/tcg/openrisc/test_sfne.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0; +    b = 3; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 3\n\t" +     "l.sfne   %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfne error\n"); +        return -1; +    } + +    a = 0; +    b = 3; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfne   %0, %1\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sfne error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sfnei.c b/tests/tcg/openrisc/test_sfnei.c new file mode 100644 index 00000000..d311c9e6 --- /dev/null +++ b/tests/tcg/openrisc/test_sfnei.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +int main(void) +{ +    int a; +    int result; + +    a = 0; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 3\n\t" +     "l.sfnei  %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfnei error\n"); +        return -1; +    } + +    a = 0; +    result = 3; +    __asm +    ("1:\n\t" +     "l.addi   %0, %0, 1\n\t" +     "l.sfnei  %0, 0x3\n\t" +     "l.bf 1b\n\t" +     "l.nop\n\t" +     : "+r"(a) +    ); +    if (a != result) { +        printf("sfnei error\n"); +        return -1; +    } + +    return 0; +} diff --git a/tests/tcg/openrisc/test_sub.c b/tests/tcg/openrisc/test_sub.c new file mode 100644 index 00000000..474ec605 --- /dev/null +++ b/tests/tcg/openrisc/test_sub.c @@ -0,0 +1,35 @@ +#include <stdio.h> + +int main(void) +{ +    int a, b; +    int result; + +    a = 0x100; +    b = 0x100; +    result = 0x0; +    __asm +    ("l.sub %0, %0, %1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sub error\n"); +        return -1; +    } + +    a = 0xffff; +    b = 0x1; +    result = 0xfffe; +    __asm +    ("l.sub %0, %0, %1\n\t" +     : "+r"(a) +     : "r"(b) +    ); +    if (a != result) { +        printf("sub error\n"); +        return -1; +    } + +    return 0; +}  | 
