target-or32: Add testcases
Add testcases for OpenRISC. Signed-off-by: Jia Liu <proljc@gmail.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									d962783e98
								
							
						
					
					
						commit
						d901eff3e6
					
				| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int a, b, c;
 | 
			
		||||
    int result;
 | 
			
		||||
 | 
			
		||||
    b = 0x01;
 | 
			
		||||
    c = 0xffffffff;
 | 
			
		||||
    result = 1;
 | 
			
		||||
    __asm
 | 
			
		||||
    ("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.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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int a, b, c;
 | 
			
		||||
    int result;
 | 
			
		||||
 | 
			
		||||
    a = 1;
 | 
			
		||||
    result = 0x1;
 | 
			
		||||
    __asm
 | 
			
		||||
    ("l.addic %0, %0, 0xffff\n\t"
 | 
			
		||||
     : "+r"(a)
 | 
			
		||||
    );
 | 
			
		||||
    if (a != result) {
 | 
			
		||||
        printf("first addic error\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
    a = 0x1;
 | 
			
		||||
    result = 0x201;
 | 
			
		||||
    __asm
 | 
			
		||||
    ("l.addic %0, %0, 0xffff\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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue