Home | History | Annotate | Download | only in mips32
      1 #include <stdio.h>
      2 
      3 #define TESTINST1(instruction, RSval, RTval, RD, RS, RT) \
      4 { \
      5    unsigned int out; \
      6    __asm__ volatile( \
      7       "li   $" #RD ", 0\n\t"  \
      8       "move $" #RS ", %1\n\t" \
      9       "move $" #RT ", %2\n\t" \
     10       instruction "\n\t" \
     11       "move %0, $" #RD "\n\t" \
     12       : "=&r" (out) \
     13       : "r" (RSval), "r" (RTval) \
     14       : #RD, #RS, #RT, "cc", "memory" \
     15         ); \
     16         printf("%s :: rd 0x%08x rs 0x%08x, rt 0x%08x\n", \
     17         instruction, out, RSval, RTval); \
     18 }
     19 
     20 #define TESTINST2(instruction, RSval, imm, RT, RS) \
     21 { \
     22    unsigned int out; \
     23    __asm__ volatile( \
     24       "move $" #RS ", %1\n\t" \
     25       instruction "\n\t" \
     26       "move %0, $" #RT "\n\t" \
     27       : "=&r" (out) \
     28       : "r" (RSval) \
     29       : #RT, #RS, "cc", "memory" \
     30         ); \
     31         printf("%s :: rt 0x%08x rs 0x%08x, imm 0x%08x\n", \
     32         instruction, out, RSval, imm); \
     33 }
     34 
     35 #define TESTINST3(instruction, RSval, RD, RS) \
     36 { \
     37    unsigned int out; \
     38    __asm__ volatile( \
     39       "move $" #RS ", %1\n\t" \
     40       instruction "\n\t" \
     41       "move %0, $" #RD "\n\t" \
     42       : "=&r" (out) \
     43       : "r" (RSval) \
     44       : #RD, #RS, "cc", "memory" \
     45         ); \
     46         printf("%s :: rd 0x%08x rs 0x%08x\n", \
     47         instruction, out, RSval); \
     48 }
     49 
     50 #define TESTINST3a(instruction, RSval, RTval, RS, RT) \
     51 { \
     52    unsigned int HI; \
     53    unsigned int LO; \
     54    __asm__ volatile( \
     55       "li $" #RS ", 0x0\n\t" \
     56       "mthi $" #RS"\n\t" \
     57       "mtlo $" #RS"\n\t" \
     58       "move $" #RS ", %2\n\t" \
     59       "move $" #RT ", %3\n\t" \
     60       instruction "\n\t" \
     61       "mfhi %0 \n\t" \
     62       "mflo %1 \n\t" \
     63       : "=&r" (HI), "=&r" (LO) \
     64       : "r" (RSval), "r"(RTval) \
     65       : #RS, #RT, "cc", "memory" \
     66         ); \
     67    printf("%s :: rs 0x%08x rt 0x%08x HI 0x%08x LO 0x%08x \n", \
     68         instruction, RSval, RTval, HI, LO); \
     69 }
     70 
     71 #define TESTINST4(instruction, RTval, RSval, RT, RS, pos, size) \
     72 { \
     73    unsigned int out; \
     74    __asm__ volatile( \
     75       "move $" #RT ", %1\n\t" \
     76       "move $" #RS ", %2\n\t" \
     77       instruction "\n\t" \
     78       "move %0, $" #RT "\n\t" \
     79       : "=&r" (out) \
     80       : "r" (RTval), "r" (RSval) \
     81       : #RT, #RS, "cc", "memory" \
     82         ); \
     83         printf("%s :: rt 0x%08x rs 0x%08x, pos 0x%08x, size 0x%08x\n", \
     84         instruction, out, RSval, pos, size); \
     85 }
     86 
     87 const unsigned int mem[] = {
     88    0x121f1e1f, 0, 3, -1,
     89    0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a,
     90    0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a,
     91    0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c
     92 };
     93 
     94 // load $t0, 0($t1)
     95 #define TESTINSN5LOAD(instruction, RTval, offset, RT) \
     96 { \
     97     unsigned int out; \
     98    __asm__ volatile( \
     99      "move $t1, %1\n\t" \
    100      "li $t0, " #RTval"\n\t" \
    101      instruction "\n\t" \
    102      "move %0, $" #RT "\n\t" \
    103      : "=&r" (out) \
    104 	 : "r" (mem), "r" (RTval) \
    105 	 : #RT, "cc", "memory" \
    106 	 ); \
    107    printf("%s :: rt 0x%08x\n", \
    108           instruction, out); \
    109 }
    110 
    111 #define TESTINSN_HILO(RSval) \
    112 { \
    113    unsigned int HI; \
    114    unsigned int LO; \
    115    __asm__ volatile( \
    116       "move $t0, %2\n\t" \
    117       "mthi $t0\n\t" \
    118       "addiu $t0, $t0, 0xffff\n\t" \
    119       "mtlo $t0\n\t" \
    120       "mfhi %0\n\t" \
    121       "mflo %1\n\t" \
    122      : "=&r" (HI), "=&r" (LO) \
    123 	 : "r" (RSval)\
    124 	 : "cc", "memory" \
    125 	 ); \
    126    printf("mfhi mflo :: HI: 0x%x, LO: 0x%x\n", \
    127           HI, LO); \
    128 }
    129 
    130 int main(int argc, char **argv)
    131 {
    132    printf("ADD\n");
    133    TESTINST1("add $t0, $t1, $t2", 0, 0, t0, t1, t2);
    134    TESTINST1("add $t0, $t1, $t2", 0, 1, t0, t1, t2);
    135    TESTINST1("add $t0, $t1, $t2", 1, 0, t0, t1, t2);
    136    TESTINST1("add $t0, $t1, $t2", 1, 1, t0, t1, t2);
    137    TESTINST1("add $t0, $t1, $t2", 0, -1, t0, t1, t2);
    138    TESTINST1("add $t0, $t1, $t2", 1, -1, t0, t1, t2);
    139    TESTINST1("add $t0, $t1, $t2", 0x80000000, 0, t0, t1, t2);
    140    TESTINST1("add $t0, $t1, $t2", 0x31415927, 0x27181728, t0, t1, t2);
    141    TESTINST1("add $t0, $t1, $t2", 0x31415927, 0x97181728, t0, t1, t2);
    142    TESTINST1("add $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    143    TESTINST1("add $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    144    TESTINST1("add $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    145 
    146    printf("ADDI\n");
    147    TESTINST2("addi $t0, $t1, 0", 0, 0, t0, t1);
    148    TESTINST2("addi $t0, $t1, 1", 0, 1, t0, t1);
    149    TESTINST2("addi $t0, $t1, 1", 1, 0, t0, t1);
    150    TESTINST2("addi $t0, $t1, 1", 1, 1, t0, t1);
    151    TESTINST2("addi $t0, $t1, -1", 0, -1, t0, t1);
    152    TESTINST2("addi $t0, $t1, -1", 1, -1, t0, t1);
    153    TESTINST2("addi $t0, $t1, 0", 0x80000000, 0, t0, t1);
    154    TESTINST2("addi $t0, $t1, 0", -1,         0,          t0, t1);
    155    TESTINST2("addi $t0, $t1, 0", 0x80000000, 0,          t0, t1);
    156 
    157    printf("ADDIU\n");
    158    TESTINST2("addiu $t0, $t1, 0", 0, 0, t0, t1);
    159    TESTINST2("addiu $t0, $t1, 1", 0, 1, t0, t1);
    160    TESTINST2("addiu $t0, $t1, 1", 1, 0, t0, t1);
    161    TESTINST2("addiu $t0, $t1, 1", 1, 1, t0, t1);
    162    TESTINST2("addiu $t0, $t1, -1", 0, -1, t0, t1);
    163    TESTINST2("addiu $t0, $t1, -1", 1, -1, t0, t1);
    164    TESTINST2("addiu $t0, $t1, 0", 0x80000000, 0, t0, t1);
    165    TESTINST2("addiu $t0, $t1, 0", -1,         0,          t0, t1);
    166    TESTINST2("addiu $t0, $t1, 0", 0x80000000, 0,          t0, t1);
    167 
    168    printf("ADDU\n");
    169    TESTINST1("addu $t0, $t1, $t2", 0, 0, t0, t1, t2);
    170    TESTINST1("addu $t0, $t1, $t2", 0, 1, t0, t1, t2);
    171    TESTINST1("addu $t0, $t1, $t2", 1, 0, t0, t1, t2);
    172    TESTINST1("addu $t0, $t1, $t2", 1, 1, t0, t1, t2);
    173    TESTINST1("addu $t0, $t1, $t2", 0, -1, t0, t1, t2);
    174    TESTINST1("addu $t0, $t1, $t2", 1, -1, t0, t1, t2);
    175    TESTINST1("addu $t0, $t1, $t2", 0x31415927, 0x27181728, t0, t1, t2);
    176    TESTINST1("addu $t0, $t1, $t2", 0x31415927, 0x97181728, t0, t1, t2);
    177    TESTINST1("addu $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    178    TESTINST1("addu $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    179    TESTINST1("addu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    180    TESTINST1("addu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    181    TESTINST1("addu $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    182    TESTINST1("addu $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    183    TESTINST1("addu $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    184    TESTINST1("addu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    185    TESTINST1("addu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    186    TESTINST1("addu $t0, $t1, $t2", 0x80000000, 0x7fffffff, t0, t1, t2);
    187    TESTINST1("addu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    188 
    189    printf("AND\n");
    190    TESTINST1("and $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    191    TESTINST1("and $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    192    TESTINST1("and $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    193    TESTINST1("and $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    194    TESTINST1("and $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    195    TESTINST1("and $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    196    TESTINST1("and $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    197    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    198    TESTINST1("and $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    199    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    200    TESTINST1("and $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    201    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    202    TESTINST1("and $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    203    TESTINST1("and $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    204    TESTINST1("and $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    205    TESTINST1("and $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    206    TESTINST1("and $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    207    TESTINST1("and $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    208    TESTINST1("and $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    209    TESTINST1("and $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    210    TESTINST1("and $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    211    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    212    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    213    TESTINST1("and $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    214    TESTINST1("and $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    215    TESTINST1("and $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    216 
    217    printf("ANDI\n");
    218    TESTINST2("andi $t0, $t1, 1", 0, 1, t0, t1);
    219    TESTINST2("andi $t0, $t1, 0", 1, 0, t0, t1);
    220    TESTINST2("andi $t0, $t1, 1", 1, 1, t0, t1);
    221    TESTINST2("andi $t0, $t1, 1", 0x7fffffff, 0, t0, t1);
    222    TESTINST2("andi $t0, $t1, 0", 0x80000000, 0, t0, t1);
    223    TESTINST2("andi $t0, $t1, 0x3145", 0xffffffff, 0x3145, t0, t1);
    224 
    225    printf("CLO\n");
    226    TESTINST3("clo  $t0, $t1", 0, t0, t1);
    227    TESTINST3("clo  $t0, $t1", 1, t0, t1);
    228    TESTINST3("clo  $t0, $t1", 0x10, t0, t1);
    229    TESTINST3("clo  $t0, $t1", 0xffffffff, t0, t1);
    230 
    231    printf("CLZ\n");
    232    TESTINST3("clz  $t0, $t1", 0, t0, t1);
    233    TESTINST3("clz  $t0, $t1", 1, t0, t1);
    234    TESTINST3("clz  $t0, $t1", 0x10, t0, t1);
    235    TESTINST3("clz  $t0, $t1", 0xffffffff, t0, t1);
    236 
    237    printf("DIV\n");
    238    TESTINST3a("div  $t0, $t1", 0x6, 0x2, t0, t1);
    239    TESTINST3a("div  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    240    TESTINST3a("div  $t0, $t1", 0xffffffff, 0x1, t0, t1);
    241    TESTINST3a("div  $t0, $t1", 0x1, 0xffffffff, t0, t1);
    242    TESTINST3a("div  $t0, $t1", 0x2, 0x6, t0, t1);
    243 
    244    printf("DIVU\n");
    245    TESTINST3a("divu  $t0, $t1", 0x6, 0x2, t0, t1);
    246    TESTINST3a("divu  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    247    TESTINST3a("divu  $t0, $t1", 0xffffffff, 0x1, t0, t1);
    248    TESTINST3a("divu  $t0, $t1", 0x1, 0xffffffff, t0, t1);
    249    TESTINST3a("divu  $t0, $t1", 0x2, 0x6, t0, t1);
    250    TESTINST3a("divu  $t0, $t1", 0x0, 0x2, t0, t1);
    251 
    252 #if (__mips==32) && (__mips_isa_rev>=2)
    253    printf("EXT\n");
    254    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xffffffff, t0, t1, 2, 6);
    255    TESTINST4("ext $t0, $t1, 2, 6", 0xffffffff, 0xffffffff, t0, t1, 2, 6);
    256    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xffffffff, t0, t1, 31, 6);
    257    TESTINST4("ext $t0, $t1, 2, 6", 0, 0, t0, t1, 32, 32);
    258    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xffff, t0, t1, 31, 0);
    259    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xff, t0, t1, 31, 0)
    260    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xf0000000, t0, t1, 31, 0)
    261    TESTINST4("ext $t0, $t1, 2, 6", 0, 0xf0000000, t0, t1, 0, 31)
    262    TESTINST4("ext $t0, $t1, 2, 6", 0, 0x31415927, t0, t1, 3, 25)
    263 
    264    printf("INS\n");
    265    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xffffffff, t0, t1, 2, 6);
    266    TESTINST4("ins $t0, $t1, 2, 6", 0xffffffff, 0xffffffff, t0, t1, 2, 6);
    267    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xffffffff, t0, t1, 31, 6);
    268    TESTINST4("ins $t0, $t1, 2, 6", 0, 0, t0, t1, 32, 32);
    269    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xffff, t0, t1, 31, 0);
    270    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xff, t0, t1, 31, 0)
    271    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xf0000000, t0, t1, 31, 0)
    272    TESTINST4("ins $t0, $t1, 2, 6", 0, 0xf0000000, t0, t1, 0, 31)
    273    TESTINST4("ins $t0, $t1, 2, 6", 0, 0x31415927, t0, t1, 3, 25)
    274 #endif
    275 
    276    printf("LB\n");
    277    TESTINSN5LOAD("lb $t0, 0($t1)", 0, 0, t0);
    278    TESTINSN5LOAD("lb $t0, 4($t1)", 0, 4, t0);
    279    TESTINSN5LOAD("lb $t0, 8($t1)", 0, 8, t0);
    280    TESTINSN5LOAD("lb $t0, 12($t1)", 0, 12, t0);
    281    TESTINSN5LOAD("lb $t0, 16($t1)", 0, 16, t0);
    282    TESTINSN5LOAD("lb $t0, 20($t1)", 0, 20, t0);
    283    TESTINSN5LOAD("lb $t0, 24($t1)", 0, 24, t0);
    284    TESTINSN5LOAD("lb $t0, 28($t1)", 0, 28, t0);
    285    TESTINSN5LOAD("lb $t0, 32($t1)", 0, 32, t0);
    286    TESTINSN5LOAD("lb $t0, 36($t1)", 0, 36, t0);
    287    TESTINSN5LOAD("lb $t0, 40($t1)", 0, 40, t0);
    288    TESTINSN5LOAD("lb $t0, 44($t1)", 0, 44, t0);
    289    TESTINSN5LOAD("lb $t0, 48($t1)", 0, 48, t0);
    290    TESTINSN5LOAD("lb $t0, 52($t1)", 0, 52, t0);
    291    TESTINSN5LOAD("lb $t0, 56($t1)", 0, 56, t0);
    292    TESTINSN5LOAD("lb $t0, 60($t1)", 0, 60, t0);
    293    TESTINSN5LOAD("lb $t0, 64($t1)", 0, 64, t0);
    294    TESTINSN5LOAD("lb $t0, 2($t1)", 0, 2, t0);
    295    TESTINSN5LOAD("lb $t0, 6($t1)", 0, 6, t0);
    296    TESTINSN5LOAD("lb $t0, 10($t1)", 0, 10, t0);
    297    TESTINSN5LOAD("lb $t0, 14($t1)", 0, 14, t0);
    298    TESTINSN5LOAD("lb $t0, 18($t1)", 0, 18, t0);
    299    TESTINSN5LOAD("lb $t0, 22($t1)", 0, 22, t0);
    300    TESTINSN5LOAD("lb $t0, 26($t1)", 0, 26, t0);
    301    TESTINSN5LOAD("lb $t0, 30($t1)", 0, 30, t0);
    302    TESTINSN5LOAD("lb $t0, 34($t1)", 0, 34, t0);
    303    TESTINSN5LOAD("lb $t0, 38($t1)", 0, 38, t0);
    304 
    305    printf("LBU\n");
    306    TESTINSN5LOAD("lbu $t0, 0($t1)", 0, 0, t0);
    307    TESTINSN5LOAD("lbu $t0, 4($t1)", 0, 4, t0);
    308    TESTINSN5LOAD("lbu $t0, 8($t1)", 0, 8, t0);
    309    TESTINSN5LOAD("lbu $t0, 12($t1)", 0, 12, t0);
    310    TESTINSN5LOAD("lbu $t0, 16($t1)", 0, 16, t0);
    311    TESTINSN5LOAD("lbu $t0, 20($t1)", 0, 20, t0);
    312    TESTINSN5LOAD("lbu $t0, 24($t1)", 0, 24, t0);
    313    TESTINSN5LOAD("lbu $t0, 28($t1)", 0, 28, t0);
    314    TESTINSN5LOAD("lbu $t0, 32($t1)", 0, 32, t0);
    315    TESTINSN5LOAD("lbu $t0, 36($t1)", 0, 36, t0);
    316    TESTINSN5LOAD("lbu $t0, 40($t1)", 0, 40, t0);
    317    TESTINSN5LOAD("lbu $t0, 44($t1)", 0, 44, t0);
    318    TESTINSN5LOAD("lbu $t0, 48($t1)", 0, 48, t0);
    319    TESTINSN5LOAD("lbu $t0, 52($t1)", 0, 52, t0);
    320    TESTINSN5LOAD("lbu $t0, 56($t1)", 0, 56, t0);
    321    TESTINSN5LOAD("lbu $t0, 60($t1)", 0, 60, t0);
    322    TESTINSN5LOAD("lbu $t0, 64($t1)", 0, 64, t0);
    323    TESTINSN5LOAD("lbu $t0, 2($t1)", 0, 2, t0);
    324    TESTINSN5LOAD("lbu $t0, 6($t1)", 0, 6, t0);
    325    TESTINSN5LOAD("lbu $t0, 10($t1)", 0, 10, t0);
    326    TESTINSN5LOAD("lbu $t0, 14($t1)", 0, 14, t0);
    327    TESTINSN5LOAD("lbu $t0, 18($t1)", 0, 18, t0);
    328    TESTINSN5LOAD("lbu $t0, 22($t1)", 0, 22, t0);
    329    TESTINSN5LOAD("lbu $t0, 26($t1)", 0, 26, t0);
    330    TESTINSN5LOAD("lbu $t0, 30($t1)", 0, 30, t0);
    331    TESTINSN5LOAD("lbu $t0, 34($t1)", 0, 34, t0);
    332    TESTINSN5LOAD("lbu $t0, 38($t1)", 0, 38, t0);
    333 
    334    printf("LH\n");
    335    TESTINSN5LOAD("lh $t0, 0($t1)", 0, 0, t0);
    336    TESTINSN5LOAD("lh $t0, 4($t1)", 0, 4, t0);
    337    TESTINSN5LOAD("lh $t0, 8($t1)", 0, 8, t0);
    338    TESTINSN5LOAD("lh $t0, 12($t1)", 0, 12, t0);
    339    TESTINSN5LOAD("lh $t0, 16($t1)", 0, 16, t0);
    340    TESTINSN5LOAD("lh $t0, 20($t1)", 0, 20, t0);
    341    TESTINSN5LOAD("lh $t0, 24($t1)", 0, 24, t0);
    342    TESTINSN5LOAD("lh $t0, 28($t1)", 0, 28, t0);
    343    TESTINSN5LOAD("lh $t0, 32($t1)", 0, 32, t0);
    344    TESTINSN5LOAD("lh $t0, 36($t1)", 0, 36, t0);
    345    TESTINSN5LOAD("lh $t0, 40($t1)", 0, 40, t0);
    346    TESTINSN5LOAD("lh $t0, 44($t1)", 0, 44, t0);
    347    TESTINSN5LOAD("lh $t0, 48($t1)", 0, 48, t0);
    348    TESTINSN5LOAD("lh $t0, 52($t1)", 0, 52, t0);
    349    TESTINSN5LOAD("lh $t0, 56($t1)", 0, 56, t0);
    350    TESTINSN5LOAD("lh $t0, 60($t1)", 0, 60, t0);
    351    TESTINSN5LOAD("lh $t0, 64($t1)", 0, 64, t0);
    352    TESTINSN5LOAD("lh $t0, 2($t1)", 0, 2, t0);
    353    TESTINSN5LOAD("lh $t0, 6($t1)", 0, 6, t0);
    354    TESTINSN5LOAD("lh $t0, 10($t1)", 0, 10, t0);
    355    TESTINSN5LOAD("lh $t0, 14($t1)", 0, 14, t0);
    356    TESTINSN5LOAD("lh $t0, 18($t1)", 0, 18, t0);
    357    TESTINSN5LOAD("lh $t0, 22($t1)", 0, 22, t0);
    358    TESTINSN5LOAD("lh $t0, 26($t1)", 0, 26, t0);
    359    TESTINSN5LOAD("lh $t0, 30($t1)", 0, 30, t0);
    360    TESTINSN5LOAD("lh $t0, 34($t1)", 0, 34, t0);
    361    TESTINSN5LOAD("lh $t0, 38($t1)", 0, 38, t0);
    362 
    363    printf("LHU\n");
    364    TESTINSN5LOAD("lhu $t0, 0($t1)", 0, 0, t0);
    365    TESTINSN5LOAD("lhu $t0, 4($t1)", 0, 4, t0);
    366    TESTINSN5LOAD("lhu $t0, 8($t1)", 0, 8, t0);
    367    TESTINSN5LOAD("lhu $t0, 12($t1)", 0, 12, t0);
    368    TESTINSN5LOAD("lhu $t0, 16($t1)", 0, 16, t0);
    369    TESTINSN5LOAD("lhu $t0, 20($t1)", 0, 20, t0);
    370    TESTINSN5LOAD("lhu $t0, 24($t1)", 0, 24, t0);
    371    TESTINSN5LOAD("lhu $t0, 28($t1)", 0, 28, t0);
    372    TESTINSN5LOAD("lhu $t0, 32($t1)", 0, 32, t0);
    373    TESTINSN5LOAD("lhu $t0, 36($t1)", 0, 36, t0);
    374    TESTINSN5LOAD("lhu $t0, 40($t1)", 0, 40, t0);
    375    TESTINSN5LOAD("lhu $t0, 44($t1)", 0, 44, t0);
    376    TESTINSN5LOAD("lhu $t0, 48($t1)", 0, 48, t0);
    377    TESTINSN5LOAD("lhu $t0, 52($t1)", 0, 52, t0);
    378    TESTINSN5LOAD("lhu $t0, 56($t1)", 0, 56, t0);
    379    TESTINSN5LOAD("lhu $t0, 60($t1)", 0, 60, t0);
    380    TESTINSN5LOAD("lhu $t0, 64($t1)", 0, 64, t0);
    381    TESTINSN5LOAD("lhu $t0, 2($t1)", 0, 2, t0);
    382    TESTINSN5LOAD("lhu $t0, 6($t1)", 0, 6, t0);
    383    TESTINSN5LOAD("lhu $t0, 10($t1)", 0, 10, t0);
    384    TESTINSN5LOAD("lhu $t0, 14($t1)", 0, 14, t0);
    385    TESTINSN5LOAD("lhu $t0, 18($t1)", 0, 18, t0);
    386    TESTINSN5LOAD("lhu $t0, 22($t1)", 0, 22, t0);
    387    TESTINSN5LOAD("lhu $t0, 26($t1)", 0, 26, t0);
    388    TESTINSN5LOAD("lhu $t0, 30($t1)", 0, 30, t0);
    389    TESTINSN5LOAD("lhu $t0, 34($t1)", 0, 34, t0);
    390    TESTINSN5LOAD("lhu $t0, 38($t1)", 0, 38, t0);
    391 
    392    printf("LUI\n");
    393    TESTINST3("lui  $t0, 0xffff", 0xffff, t0, t1);
    394    TESTINST3("lui  $t0, 0xff00", 0xff00, t0, t1);
    395    TESTINST3("lui  $t0, 0xff", 0xff, t0, t1);
    396    TESTINST3("lui  $t0, 0x0", 0x0, t0, t1);
    397    TESTINST3("lui  $t0, 0x5", 0x5, t0, t1);
    398    TESTINST3("lui  $t0, 0x387", 0x387, t0, t1);
    399 
    400    printf("LW\n");
    401    TESTINSN5LOAD("lw $t0, 0($t1)", 0, 0, t0);
    402    TESTINSN5LOAD("lw $t0, 4($t1)", 0, 4, t0);
    403    TESTINSN5LOAD("lw $t0, 8($t1)", 0, 8, t0);
    404    TESTINSN5LOAD("lw $t0, 12($t1)", 0, 12, t0);
    405    TESTINSN5LOAD("lw $t0, 16($t1)", 0, 16, t0);
    406    TESTINSN5LOAD("lw $t0, 20($t1)", 0, 20, t0);
    407    TESTINSN5LOAD("lw $t0, 24($t1)", 0, 24, t0);
    408    TESTINSN5LOAD("lw $t0, 28($t1)", 0, 28, t0);
    409    TESTINSN5LOAD("lw $t0, 32($t1)", 0, 32, t0);
    410    TESTINSN5LOAD("lw $t0, 36($t1)", 0, 36, t0);
    411    TESTINSN5LOAD("lw $t0, 40($t1)", 0, 40, t0);
    412    TESTINSN5LOAD("lw $t0, 44($t1)", 0, 44, t0);
    413    TESTINSN5LOAD("lw $t0, 48($t1)", 0, 48, t0);
    414    TESTINSN5LOAD("lw $t0, 52($t1)", 0, 52, t0);
    415    TESTINSN5LOAD("lw $t0, 56($t1)", 0, 56, t0);
    416    TESTINSN5LOAD("lw $t0, 60($t1)", 0, 60, t0);
    417    TESTINSN5LOAD("lw $t0, 64($t1)", 0, 64, t0);
    418    TESTINSN5LOAD("lw $t0, 2($t1)", 0, 2, t0);
    419    TESTINSN5LOAD("lw $t0, 6($t1)", 0, 6, t0);
    420    TESTINSN5LOAD("lw $t0, 10($t1)", 0, 10, t0);
    421    TESTINSN5LOAD("lw $t0, 14($t1)", 0, 14, t0);
    422    TESTINSN5LOAD("lw $t0, 18($t1)", 0, 18, t0);
    423    TESTINSN5LOAD("lw $t0, 22($t1)", 0, 22, t0);
    424    TESTINSN5LOAD("lw $t0, 26($t1)", 0, 26, t0);
    425    TESTINSN5LOAD("lw $t0, 30($t1)", 0, 30, t0);
    426    TESTINSN5LOAD("lw $t0, 34($t1)", 0, 34, t0);
    427    TESTINSN5LOAD("lw $t0, 38($t1)", 0, 38, t0);
    428 
    429    printf("LWL\n");
    430    TESTINSN5LOAD("lwl $t0, 0($t1)", 0, 0, t0);
    431    TESTINSN5LOAD("lwl $t0, 4($t1)", 0, 4, t0);
    432    TESTINSN5LOAD("lwl $t0, 8($t1)", 0, 8, t0);
    433    TESTINSN5LOAD("lwl $t0, 12($t1)", 0, 12, t0);
    434    TESTINSN5LOAD("lwl $t0, 16($t1)", 0, 16, t0);
    435    TESTINSN5LOAD("lwl $t0, 20($t1)", 0, 20, t0);
    436    TESTINSN5LOAD("lwl $t0, 24($t1)", 0, 24, t0);
    437    TESTINSN5LOAD("lwl $t0, 28($t1)", 0, 28, t0);
    438    TESTINSN5LOAD("lwl $t0, 32($t1)", 0, 32, t0);
    439    TESTINSN5LOAD("lwl $t0, 36($t1)", 0, 36, t0);
    440    TESTINSN5LOAD("lwl $t0, 40($t1)", 0, 40, t0);
    441    TESTINSN5LOAD("lwl $t0, 44($t1)", 0, 44, t0);
    442    TESTINSN5LOAD("lwl $t0, 48($t1)", 0, 48, t0);
    443    TESTINSN5LOAD("lwl $t0, 52($t1)", 0, 52, t0);
    444    TESTINSN5LOAD("lwl $t0, 56($t1)", 0, 56, t0);
    445    TESTINSN5LOAD("lwl $t0, 60($t1)", 0, 60, t0);
    446    TESTINSN5LOAD("lwl $t0, 64($t1)", 0, 64, t0);
    447    TESTINSN5LOAD("lwl $t0, 2($t1)", 0, 2, t0);
    448    TESTINSN5LOAD("lwl $t0, 6($t1)", 0, 6, t0);
    449    TESTINSN5LOAD("lwl $t0, 10($t1)", 0, 10, t0);
    450    TESTINSN5LOAD("lwl $t0, 14($t1)", 0, 14, t0);
    451    TESTINSN5LOAD("lwl $t0, 18($t1)", 0, 18, t0);
    452    TESTINSN5LOAD("lwl $t0, 22($t1)", 0, 22, t0);
    453    TESTINSN5LOAD("lwl $t0, 26($t1)", 0, 26, t0);
    454    TESTINSN5LOAD("lwl $t0, 30($t1)", 0, 30, t0);
    455    TESTINSN5LOAD("lwl $t0, 34($t1)", 0, 34, t0);
    456    TESTINSN5LOAD("lwl $t0, 38($t1)", 0, 38, t0);
    457 
    458    printf("LWR\n");
    459    TESTINSN5LOAD("lwr $t0, 0($t1)", 0, 0, t0);
    460    TESTINSN5LOAD("lwr $t0, 4($t1)", 0, 4, t0);
    461    TESTINSN5LOAD("lwr $t0, 8($t1)", 0, 8, t0);
    462    TESTINSN5LOAD("lwr $t0, 12($t1)", 0, 12, t0);
    463    TESTINSN5LOAD("lwr $t0, 16($t1)", 0, 16, t0);
    464    TESTINSN5LOAD("lwr $t0, 20($t1)", 0, 20, t0);
    465    TESTINSN5LOAD("lwr $t0, 24($t1)", 0, 24, t0);
    466    TESTINSN5LOAD("lwr $t0, 28($t1)", 0, 28, t0);
    467    TESTINSN5LOAD("lwr $t0, 32($t1)", 0, 32, t0);
    468    TESTINSN5LOAD("lwr $t0, 36($t1)", 0, 36, t0);
    469    TESTINSN5LOAD("lwr $t0, 40($t1)", 0, 40, t0);
    470    TESTINSN5LOAD("lwr $t0, 44($t1)", 0, 44, t0);
    471    TESTINSN5LOAD("lwr $t0, 48($t1)", 0, 48, t0);
    472    TESTINSN5LOAD("lwr $t0, 52($t1)", 0, 52, t0);
    473    TESTINSN5LOAD("lwr $t0, 56($t1)", 0, 56, t0);
    474    TESTINSN5LOAD("lwr $t0, 60($t1)", 0, 60, t0);
    475    TESTINSN5LOAD("lwr $t0, 64($t1)", 0, 64, t0);
    476    TESTINSN5LOAD("lwr $t0, 2($t1)", 0, 2, t0);
    477    TESTINSN5LOAD("lwr $t0, 6($t1)", 0, 6, t0);
    478    TESTINSN5LOAD("lwr $t0, 10($t1)", 0, 10, t0);
    479    TESTINSN5LOAD("lwr $t0, 14($t1)", 0, 14, t0);
    480    TESTINSN5LOAD("lwr $t0, 18($t1)", 0, 18, t0);
    481    TESTINSN5LOAD("lwr $t0, 22($t1)", 0, 22, t0);
    482    TESTINSN5LOAD("lwr $t0, 26($t1)", 0, 26, t0);
    483    TESTINSN5LOAD("lwr $t0, 30($t1)", 0, 30, t0);
    484    TESTINSN5LOAD("lwr $t0, 34($t1)", 0, 34, t0);
    485    TESTINSN5LOAD("lwr $t0, 38($t1)", 0, 38, t0);
    486 
    487    printf("MADD\n");
    488    TESTINST3a("madd  $t0, $t1", 0x6, 0x2, t0, t1);
    489    TESTINST3a("madd  $t0, $t1", 0x55, 0x28, t0, t1);
    490    TESTINST3a("madd  $t0, $t1", 0x18, 0xfff, t0, t1);
    491    TESTINST3a("madd  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    492    TESTINST3a("madd  $t0, $t1", 0xffffffff, 0x1, t0, t1);
    493    TESTINST3a("madd  $t0, $t1", 0x1, 0xffffffff, t0, t1);
    494    TESTINST3a("madd  $t0, $t1", 0x2, 0x6, t0, t1);
    495    TESTINST3a("madd  $t0, $t1", 0x356, 0x555, t0, t1);
    496 
    497    printf("MADDU\n");
    498    TESTINST3a("maddu  $t0, $t1", 0x6, 0x2, t0, t1);
    499    TESTINST3a("maddu  $t0, $t1", 0x55, 0x28, t0, t1);
    500    TESTINST3a("maddu  $t0, $t1", 0x18, 0xfff, t0, t1);
    501    TESTINST3a("maddu  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    502    TESTINST3a("maddu  $t0, $t1", 0xffffffff, 0x1, t0, t1);
    503    TESTINST3a("maddu  $t0, $t1", 0x1, 0xffffffff, t0, t1);
    504    TESTINST3a("maddu  $t0, $t1", 0x2, 0x6, t0, t1);
    505    TESTINST3a("maddu  $t0, $t1", 0x356, 0x555, t0, t1);
    506 
    507    printf("MOVN\n");
    508    TESTINST1("movn $t0, $t1, $t2", 0x31415927, 0,          t0, t1, t2);
    509    TESTINST1("movn $t0, $t1, $t2", 0x31415927, 1,          t0, t1, t2);
    510    TESTINST1("movn $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    511    TESTINST1("movn $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    512    TESTINST1("movn $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    513    TESTINST1("movn $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    514    TESTINST1("movn $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    515    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    516    TESTINST1("movn $t0, $t1, $t2", 0x7fffffff, 1,          t0, t1, t2);
    517    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    518    TESTINST1("movn $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    519    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    520    TESTINST1("movn $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    521    TESTINST1("movn $t0, $t1, $t2", 0x31415927, 0,          t0, t1, t2);
    522    TESTINST1("movn $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    523    TESTINST1("movn $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    524    TESTINST1("movn $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    525    TESTINST1("movn $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    526    TESTINST1("movn $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    527    TESTINST1("movn $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    528    TESTINST1("movn $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    529    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    530    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    531    TESTINST1("movn $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    532    TESTINST1("movn $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    533    TESTINST1("movn $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    534 
    535    printf("MOVZ\n");
    536    TESTINST1("movz $t0, $t1, $t2", 0x31415927, 0,          t0, t1, t2);
    537    TESTINST1("movz $t0, $t1, $t2", 0x31415927, 1,          t0, t1, t2);
    538    TESTINST1("movz $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    539    TESTINST1("movz $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    540    TESTINST1("movz $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    541    TESTINST1("movz $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    542    TESTINST1("movz $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    543    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    544    TESTINST1("movz $t0, $t1, $t2", 0x7fffffff, 1,          t0, t1, t2);
    545    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    546    TESTINST1("movz $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    547    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    548    TESTINST1("movz $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    549    TESTINST1("movz $t0, $t1, $t2", 0x31415927, 0,          t0, t1, t2);
    550    TESTINST1("movz $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    551    TESTINST1("movz $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    552    TESTINST1("movz $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    553    TESTINST1("movz $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    554    TESTINST1("movz $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    555    TESTINST1("movz $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    556    TESTINST1("movz $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    557    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    558    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    559    TESTINST1("movz $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    560    TESTINST1("movz $t0, $t1, $t2", 0x80000000, 1,          t0, t1, t2);
    561    TESTINST1("movz $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    562 
    563    printf("MSUB\n");
    564    TESTINST3a("msub  $t0, $t1", 0x6, 0x2, t0, t1);
    565    TESTINST3a("msub  $t0, $t1", 0x55, 0x28, t0, t1);
    566    TESTINST3a("msub  $t0, $t1", 0x18, 0xfff, t0, t1);
    567    TESTINST3a("msub  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    568    TESTINST3a("msub  $t0, $t1", 0xffffffff, 0x1, t0, t1);
    569    TESTINST3a("msub  $t0, $t1", 0x1, 0xffffffff, t0, t1);
    570    TESTINST3a("msub  $t0, $t1", 0x2, 0x6, t0, t1);
    571    TESTINST3a("msub  $t0, $t1", 0x356, 0x555, t0, t1);
    572 
    573    printf("MSUBU\n");
    574    TESTINST3a("msubu  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    575    TESTINST3a("msubu  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    576    TESTINST3a("msubu  $t0, $t1", 0,          255,        t0, t1);
    577    TESTINST3a("msubu  $t0, $t1", -1,         0,          t0, t1);
    578    TESTINST3a("msubu  $t0, $t1", 0,          1,          t0, t1);
    579    TESTINST3a("msubu  $t0, $t1", 0,          0,          t0, t1);
    580    TESTINST3a("msubu  $t0, $t1", 0x80000000, -1,         t0, t1);
    581    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    582    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0,          t0, t1);
    583    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    584    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    585    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    586    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    587    TESTINST3a("msubu  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    588    TESTINST3a("msubu  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    589    TESTINST3a("msubu  $t0, $t1", 0,          255,        t0, t1);
    590    TESTINST3a("msubu  $t0, $t1", 1,          0,          t0, t1);
    591    TESTINST3a("msubu  $t0, $t1", 0,          1,          t0, t1);
    592    TESTINST3a("msubu  $t0, $t1", -1,         0,          t0, t1);
    593    TESTINST3a("msubu  $t0, $t1", 0,          -1,         t0, t1);
    594    TESTINST3a("msubu  $t0, $t1", 0,          0x80000000, t0, t1);
    595    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0,          t0, t1);
    596    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    597    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    598    TESTINST3a("msubu  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    599    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    600    TESTINST3a("msubu  $t0, $t1", 0xffffffff, 0,          t0, t1);
    601    TESTINST3a("msubu  $t0, $t1", 0,          0xffffffff, t0, t1);
    602    TESTINST3a("msubu  $t0, $t1", 0xffffffff, 0xffffffff, t0, t1);
    603    TESTINST3a("msubu  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    604    TESTINST3a("msubu  $t0, $t1", 0x0000ffff, 0x0000ffff, t0, t1);
    605 
    606    printf("MUL\n");
    607    TESTINST1("mul $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    608    TESTINST1("mul $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    609    TESTINST1("mul $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    610    TESTINST1("mul $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    611    TESTINST1("mul $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    612    TESTINST1("mul $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    613    TESTINST1("mul $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    614    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    615    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    616    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    617    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    618    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    619    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    620    TESTINST1("mul $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    621    TESTINST1("mul $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    622    TESTINST1("mul $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    623    TESTINST1("mul $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    624    TESTINST1("mul $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    625    TESTINST1("mul $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    626    TESTINST1("mul $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    627    TESTINST1("mul $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    628    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    629    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    630    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    631    TESTINST1("mul $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    632    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    633    TESTINST1("mul $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
    634    TESTINST1("mul $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
    635    TESTINST1("mul $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
    636    TESTINST1("mul $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    637    TESTINST1("mul $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
    638 
    639    printf("MULT\n");
    640    TESTINST3a("mult  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    641    TESTINST3a("mult  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    642    TESTINST3a("mult  $t0, $t1", 0,          255,        t0, t1);
    643    TESTINST3a("mult  $t0, $t1", -1,         0,          t0, t1);
    644    TESTINST3a("mult  $t0, $t1", 0,          1,          t0, t1);
    645    TESTINST3a("mult  $t0, $t1", 0,          0,          t0, t1);
    646    TESTINST3a("mult  $t0, $t1", 0x80000000, -1,         t0, t1);
    647    TESTINST3a("mult  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    648    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0,          t0, t1);
    649    TESTINST3a("mult  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    650    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    651    TESTINST3a("mult  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    652    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    653    TESTINST3a("mult  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    654    TESTINST3a("mult  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    655    TESTINST3a("mult  $t0, $t1", 0,          255,        t0, t1);
    656    TESTINST3a("mult  $t0, $t1", 1,          0,          t0, t1);
    657    TESTINST3a("mult  $t0, $t1", 0,          1,          t0, t1);
    658    TESTINST3a("mult  $t0, $t1", -1,         0,          t0, t1);
    659    TESTINST3a("mult  $t0, $t1", 0,          -1,         t0, t1);
    660    TESTINST3a("mult  $t0, $t1", 0,          0x80000000, t0, t1);
    661    TESTINST3a("mult  $t0, $t1", 0x80000000, 0,          t0, t1);
    662    TESTINST3a("mult  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    663    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    664    TESTINST3a("mult  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    665    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    666    TESTINST3a("mult  $t0, $t1", 0xffffffff, 0,          t0, t1);
    667    TESTINST3a("mult  $t0, $t1", 0,          0xffffffff, t0, t1);
    668    TESTINST3a("mult  $t0, $t1", 0xffffffff, 0xffffffff, t0, t1);
    669    TESTINST3a("mult  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    670    TESTINST3a("mult  $t0, $t1", 0x0000ffff, 0x0000ffff, t0, t1);
    671 
    672    printf("MULTU\n");
    673    TESTINST3a("multu  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    674    TESTINST3a("multu  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    675    TESTINST3a("multu  $t0, $t1", 0,          255,        t0, t1);
    676    TESTINST3a("multu  $t0, $t1", -1,         0,          t0, t1);
    677    TESTINST3a("multu  $t0, $t1", 0,          1,          t0, t1);
    678    TESTINST3a("multu  $t0, $t1", 0,          0,          t0, t1);
    679    TESTINST3a("multu  $t0, $t1", 0x80000000, -1,         t0, t1);
    680    TESTINST3a("multu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    681    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0,          t0, t1);
    682    TESTINST3a("multu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    683    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    684    TESTINST3a("multu  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    685    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    686    TESTINST3a("multu  $t0, $t1", 0x31415927, 0xffffffff, t0, t1);
    687    TESTINST3a("multu  $t0, $t1", 0x31415927, 0xee00ee00, t0, t1);
    688    TESTINST3a("multu  $t0, $t1", 0,          255,        t0, t1);
    689    TESTINST3a("multu  $t0, $t1", 1,          0,          t0, t1);
    690    TESTINST3a("multu  $t0, $t1", 0,          1,          t0, t1);
    691    TESTINST3a("multu  $t0, $t1", -1,         0,          t0, t1);
    692    TESTINST3a("multu  $t0, $t1", 0,          -1,         t0, t1);
    693    TESTINST3a("multu  $t0, $t1", 0,          0x80000000, t0, t1);
    694    TESTINST3a("multu  $t0, $t1", 0x80000000, 0,          t0, t1);
    695    TESTINST3a("multu  $t0, $t1", 0x80000000, 0x80000000, t0, t1);
    696    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0x80000000, t0, t1);
    697    TESTINST3a("multu  $t0, $t1", 0x80000000, 0xff000000, t0, t1);
    698    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0x0dd00000, t0, t1);
    699    TESTINST3a("multu  $t0, $t1", 0xffffffff, 0,          t0, t1);
    700    TESTINST3a("multu  $t0, $t1", 0,          0xffffffff, t0, t1);
    701    TESTINST3a("multu  $t0, $t1", 0xffffffff, 0xffffffff, t0, t1);
    702    TESTINST3a("multu  $t0, $t1", 0x7fffffff, 0x7fffffff, t0, t1);
    703    TESTINST3a("multu  $t0, $t1", 0x0000ffff, 0x0000ffff, t0, t1);
    704 
    705    printf("NOR\n");
    706    TESTINST1("nor $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    707    TESTINST1("nor $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    708    TESTINST1("nor $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    709    TESTINST1("nor $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    710    TESTINST1("nor $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    711    TESTINST1("nor $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    712    TESTINST1("nor $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    713    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    714    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    715    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    716    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    717    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    718    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    719    TESTINST1("nor $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    720    TESTINST1("nor $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    721    TESTINST1("nor $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    722    TESTINST1("nor $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    723    TESTINST1("nor $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    724    TESTINST1("nor $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    725    TESTINST1("nor $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    726    TESTINST1("nor $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    727    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    728    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    729    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    730    TESTINST1("nor $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    731    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    732    TESTINST1("nor $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
    733    TESTINST1("nor $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
    734    TESTINST1("nor $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
    735    TESTINST1("nor $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    736    TESTINST1("nor $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
    737 
    738 #if (__mips==32) && (__mips_isa_rev>=2)
    739    printf("WSBH\n");
    740    TESTINST3("wsbh  $t0, $t1", 0x2, t0, t1);
    741    TESTINST3("wsbh  $t0, $t1", 0x28, t0, t1);
    742    TESTINST3("wsbh  $t0, $t1", -258, t0, t1);
    743    TESTINST3("wsbh  $t0, $t1", 0x7fffffff, t0, t1);
    744    TESTINST3("wsbh  $t0, $t1", -11, t0, t1);
    745    TESTINST3("wsbh  $t0, $t1", 0xffffffff, t0, t1);
    746    TESTINST3("wsbh  $t0, $t1", 0x16, t0, t1);
    747    TESTINST3("wsbh  $t0, $t1", -1, t0, t1);
    748 #endif
    749 
    750    printf("NOT\n");
    751    TESTINST3("not  $t0, $t1", 0x2, t0, t1);
    752    TESTINST3("not  $t0, $t1", 0x28, t0, t1);
    753    TESTINST3("not  $t0, $t1", -258, t0, t1);
    754    TESTINST3("not  $t0, $t1", 0x7fffffff, t0, t1);
    755    TESTINST3("not  $t0, $t1", -11, t0, t1);
    756    TESTINST3("not  $t0, $t1", 0xffffffff, t0, t1);
    757    TESTINST3("not  $t0, $t1", 0x16, t0, t1);
    758    TESTINST3("not  $t0, $t1", -1, t0, t1);
    759 
    760    printf("NEGU\n");
    761    TESTINST3("negu  $t0, $t1", 0x2, t0, t1);
    762    TESTINST3("negu  $t0, $t1", 0x28, t0, t1);
    763    TESTINST3("negu  $t0, $t1", -258, t0, t1);
    764    TESTINST3("negu  $t0, $t1", 0x7fffffff, t0, t1);
    765    TESTINST3("negu  $t0, $t1", -11, t0, t1);
    766    TESTINST3("negu  $t0, $t1", 0xffffffff, t0, t1);
    767    TESTINST3("negu  $t0, $t1", 0x16, t0, t1);
    768    TESTINST3("negu  $t0, $t1", -1, t0, t1);
    769 
    770    printf("OR\n");
    771    TESTINST1("or $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    772    TESTINST1("or $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    773    TESTINST1("or $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    774    TESTINST1("or $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    775    TESTINST1("or $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    776    TESTINST1("or $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    777    TESTINST1("or $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    778    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    779    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    780    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    781    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    782    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    783    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    784    TESTINST1("or $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    785    TESTINST1("or $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    786    TESTINST1("or $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    787    TESTINST1("or $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    788    TESTINST1("or $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    789    TESTINST1("or $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    790    TESTINST1("or $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    791    TESTINST1("or $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    792    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    793    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    794    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    795    TESTINST1("or $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    796    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    797    TESTINST1("or $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
    798    TESTINST1("or $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
    799    TESTINST1("or $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
    800    TESTINST1("or $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    801    TESTINST1("or $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
    802 
    803    printf("ORI\n");
    804    TESTINST2("ori $t0, $t1, 0xffff", 0x31415927, 0xffff, t0, t1);
    805    TESTINST2("ori $t0, $t1, 0xee00", 0x31415927, 0xee00, t0, t1);
    806    TESTINST2("ori $t0, $t1, 255", 0,          255,        t0, t1);
    807    TESTINST2("ori $t0, $t1, 0", -1,         0,          t0, t1);
    808    TESTINST2("ori $t0, $t1, 1", 0,          1,          t0, t1);
    809    TESTINST2("ori $t0, $t1, 0", 0,          0,          t0, t1);
    810    TESTINST2("ori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
    811    TESTINST2("ori $t0, $t1, 0", 0x7fffffff, 0,          t0, t1);
    812    TESTINST2("ori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
    813    TESTINST2("ori $t0, $t1, 0x8000", 0x7fffffff, 0x8000, t0, t1);
    814    TESTINST2("ori $t0, $t1, 0xff00", 0x80000000, 0xff00, t0, t1);
    815    TESTINST2("ori $t0, $t1, 0x0dd0", 0x7fffffff, 0x0dd0, t0, t1);
    816    TESTINST2("ori $t0, $t1, 0xffff", 0x31415927, 0xffff, t0, t1);
    817    TESTINST2("ori $t0, $t1, 0xee00", 0x31415927, 0xee00, t0, t1);
    818    TESTINST2("ori $t0, $t1, 255", 0,          255,        t0, t1);
    819    TESTINST2("ori $t0, $t1, 0", 1,          0,          t0, t1);
    820    TESTINST2("ori $t0, $t1, 1", 0,          1,          t0, t1);
    821    TESTINST2("ori $t0, $t1, 0", -1,         0,          t0, t1);
    822    TESTINST2("ori $t0, $t1, 0x8000", 0,          0x8000, t0, t1);
    823    TESTINST2("ori $t0, $t1, 0", 0x8000, 0,          t0, t1);
    824    TESTINST2("ori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
    825    TESTINST2("ori $t0, $t1, 0x8000", 0x7fffffff, 0x8000, t0, t1);
    826    TESTINST2("ori $t0, $t1, 0xff00", 0x80000000, 0xff00, t0, t1);
    827    TESTINST2("ori $t0, $t1, 0x0dd0", 0x7fffffff, 0x0dd0, t0, t1);
    828    TESTINST2("ori $t0, $t1, 0", 0xffff, 0,          t0, t1);
    829    TESTINST2("ori $t0, $t1, 0xffff", 0,          0xffff, t0, t1);
    830    TESTINST2("ori $t0, $t1, 0xffff", 0xffffffff, 0xffff, t0, t1);
    831    TESTINST2("ori $t0, $t1, 0x7fff", 0x7fffffff, 0x7fff, t0, t1);
    832    TESTINST2("ori $t0, $t1, 0x0000", 0x0000ffff, 0x0000, t0, t1);
    833 
    834 #if (__mips==32) && (__mips_isa_rev>=2)
    835    printf("ROTR\n");
    836    TESTINST2("rotr $t0, $t1, 0x00000000", 0x31415927, 0x00000000, t0, t1);
    837    TESTINST2("rotr $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
    838    TESTINST2("rotr $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
    839    TESTINST2("rotr $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
    840    TESTINST2("rotr $t0, $t1, 0x00000010", 0x31415927, 0x00000010, t0, t1);
    841    TESTINST2("rotr $t0, $t1, 0x0000001F", 0x31415927, 0x0000001F, t0, t1);
    842    TESTINST2("rotr $t0, $t1, 0x00000020", 0x31415927, 0x00000020, t0, t1);
    843    TESTINST2("rotr $t0, $t1, 0x00000021", 0x31415927, 0x00000021, t0, t1);
    844    TESTINST2("rotr $t0, $t1, 0x00000000", 0x00088000, 0x00000000, t0, t1);
    845    TESTINST2("rotr $t0, $t1, 0x00000001", 0x00088000, 0x00000001, t0, t1);
    846    TESTINST2("rotr $t0, $t1, 31", 0x00088000, 31, t0, t1);
    847    TESTINST2("rotr $t0, $t1, 16", 0x00010000, 16, t0, t1);
    848    TESTINST2("rotr $t0, $t1, 17", 0x00010000, 17, t0, t1);
    849    TESTINST2("rotr $t0, $t1, 18", 0x00010000, 18, t0, t1);
    850    TESTINST2("rotr $t0, $t1, 0", 0, 0, t0, t1);
    851    TESTINST2("rotr $t0, $t1, 0xffff", 0xffff, 0xffff, t0, t1);
    852 #endif
    853 
    854 #if (__mips==32) && (__mips_isa_rev>=2)
    855    printf("ROTRV\n");
    856    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    857    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    858    TESTINST1("rotrv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    859    TESTINST1("rotrv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    860    TESTINST1("rotrv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    861    TESTINST1("rotrv $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    862    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    863    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    864    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    865    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    866    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    867    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    868    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    869    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    870    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    871    TESTINST1("rotrv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    872    TESTINST1("rotrv $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    873    TESTINST1("rotrv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    874    TESTINST1("rotrv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    875    TESTINST1("rotrv $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    876    TESTINST1("rotrv $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    877    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    878    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    879    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    880    TESTINST1("rotrv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    881    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    882    TESTINST1("rotrv $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
    883    TESTINST1("rotrv $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
    884    TESTINST1("rotrv $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
    885    TESTINST1("rotrv $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    886    TESTINST1("rotrv $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
    887    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
    888    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
    889    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
    890    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
    891    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
    892    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
    893    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
    894    TESTINST1("rotrv $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
    895    TESTINST1("rotrv $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
    896    TESTINST1("rotrv $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
    897    TESTINST1("rotrv $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
    898    TESTINST1("rotrv $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
    899    TESTINST1("rotrv $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
    900    TESTINST1("rotrv $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
    901    TESTINST1("rotrv $t0, $t1, $t2", 0, 0, t0, t1, t2);
    902    TESTINST1("rotrv $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
    903 
    904    printf("SEB\n");
    905    TESTINST3("seb  $t0, $t1", 0x2, t0, t1);
    906    TESTINST3("seb  $t0, $t1", 0x28, t0, t1);
    907    TESTINST3("seb  $t0, $t1", -258, t0, t1);
    908    TESTINST3("seb  $t0, $t1", 0x7fffffff, t0, t1);
    909    TESTINST3("seb  $t0, $t1", -11, t0, t1);
    910    TESTINST3("seb  $t0, $t1", 0xffffffff, t0, t1);
    911    TESTINST3("seb  $t0, $t1", 0x16, t0, t1);
    912    TESTINST3("seb  $t0, $t1", -1, t0, t1);
    913 
    914    printf("SEH\n");
    915    TESTINST3("seh  $t0, $t1", 0x2, t0, t1);
    916    TESTINST3("seh  $t0, $t1", 0x28, t0, t1);
    917    TESTINST3("seh  $t0, $t1", -258, t0, t1);
    918    TESTINST3("seh  $t0, $t1", 0x7fffffff, t0, t1);
    919    TESTINST3("seh  $t0, $t1", -11, t0, t1);
    920    TESTINST3("seh  $t0, $t1", 0xffffffff, t0, t1);
    921    TESTINST3("seh  $t0, $t1", 0x16, t0, t1);
    922    TESTINST3("seh  $t0, $t1", -1, t0, t1);
    923 #endif
    924 
    925    printf("SLL\n");
    926    TESTINST2("sll $t0, $t1, 0x00000000", 0x31415927, 0x00000000, t0, t1);
    927    TESTINST2("sll $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
    928    TESTINST2("sll $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
    929    TESTINST2("sll $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
    930    TESTINST2("sll $t0, $t1, 0x00000010", 0x31415927, 0x00000010, t0, t1);
    931    TESTINST2("sll $t0, $t1, 0x0000001F", 0x31415927, 0x0000001F, t0, t1);
    932    TESTINST2("sll $t0, $t1, 0x00000009", 0x31415927, 0x00000009, t0, t1);
    933    TESTINST2("sll $t0, $t1, 0x0000000A", 0x31415927, 0x0000000A, t0, t1);
    934    TESTINST2("sll $t0, $t1, 0x00000000", 0x00088000, 0x00000000, t0, t1);
    935    TESTINST2("sll $t0, $t1, 0x00000001", 0x00088000, 0x00000001, t0, t1);
    936    TESTINST2("sll $t0, $t1, 31", 0x00088000, 31, t0, t1);
    937    TESTINST2("sll $t0, $t1, 16", 0x00010000, 16, t0, t1);
    938    TESTINST2("sll $t0, $t1, 17", 0x00010000, 17, t0, t1);
    939    TESTINST2("sll $t0, $t1, 18", 0x00010000, 18, t0, t1);
    940    TESTINST2("sll $t0, $t1, 0", 0, 0, t0, t1);
    941 
    942    printf("SLLV\n");
    943    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    944    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    945    TESTINST1("sllv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    946    TESTINST1("sllv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    947    TESTINST1("sllv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    948    TESTINST1("sllv $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    949    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    950    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    951    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
    952    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    953    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    954    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    955    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    956    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    957    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    958    TESTINST1("sllv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    959    TESTINST1("sllv $t0, $t1, $t2", 1,          0,          t0, t1, t2);
    960    TESTINST1("sllv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    961    TESTINST1("sllv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    962    TESTINST1("sllv $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
    963    TESTINST1("sllv $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
    964    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
    965    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
    966    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
    967    TESTINST1("sllv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
    968    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
    969    TESTINST1("sllv $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
    970    TESTINST1("sllv $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
    971    TESTINST1("sllv $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
    972    TESTINST1("sllv $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
    973    TESTINST1("sllv $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
    974    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
    975    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
    976    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
    977    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
    978    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
    979    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
    980    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
    981    TESTINST1("sllv $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
    982    TESTINST1("sllv $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
    983    TESTINST1("sllv $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
    984    TESTINST1("sllv $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
    985    TESTINST1("sllv $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
    986    TESTINST1("sllv $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
    987    TESTINST1("sllv $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
    988    TESTINST1("sllv $t0, $t1, $t2", 0, 0, t0, t1, t2);
    989    TESTINST1("sllv $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
    990 
    991    printf("SLT\n");
    992    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
    993    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
    994    TESTINST1("slt $t0, $t1, $t2", 0,          255,        t0, t1, t2);
    995    TESTINST1("slt $t0, $t1, $t2", -1,         0,          t0, t1, t2);
    996    TESTINST1("slt $t0, $t1, $t2", 0,          1,          t0, t1, t2);
    997    TESTINST1("slt $t0, $t1, $t2", 0,          0,          t0, t1, t2);
    998    TESTINST1("slt $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
    999    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1000    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1001    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1002    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1003    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1004    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1005    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1006    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1007    TESTINST1("slt $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1008    TESTINST1("slt $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1009    TESTINST1("slt $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1010    TESTINST1("slt $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1011    TESTINST1("slt $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1012    TESTINST1("slt $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1013    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1014    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1015    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1016    TESTINST1("slt $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1017    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1018    TESTINST1("slt $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1019    TESTINST1("slt $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1020    TESTINST1("slt $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1021    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1022    TESTINST1("slt $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1023    TESTINST1("slt $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1024    TESTINST1("slt $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1025    TESTINST1("slt $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1026    TESTINST1("slt $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1027    TESTINST1("slt $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1028    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
   1029    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1030    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
   1031    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
   1032    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
   1033    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
   1034    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
   1035    TESTINST1("slt $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
   1036    TESTINST1("slt $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
   1037    TESTINST1("slt $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
   1038    TESTINST1("slt $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
   1039    TESTINST1("slt $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
   1040    TESTINST1("slt $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
   1041    TESTINST1("slt $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
   1042    TESTINST1("slt $t0, $t1, $t2", 0, 0, t0, t1, t2);
   1043    TESTINST1("slt $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
   1044 
   1045    printf("SLTI\n");
   1046    TESTINST2("slti $t0, $t1, 0x00000000", 0x00000001, 0x31415927, t0, t1);
   1047    TESTINST2("slti $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
   1048    TESTINST2("slti $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
   1049    TESTINST2("slti $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
   1050    TESTINST2("slti $t0, $t1, 0x00000010", 0x00000010, 0x00000010, t0, t1);
   1051    TESTINST2("slti $t0, $t1, 0x0000001F", 0x00000010, 0x31415927, t0, t1);
   1052    TESTINST2("slti $t0, $t1, 0x00000009", 0x31415927, 0x00000009, t0, t1);
   1053    TESTINST2("slti $t0, $t1, 0x0000000A", 0x31415927, 0x0000000A, t0, t1);
   1054    TESTINST2("slti $t0, $t1, 0x00000000", 0x00088000, 0x0000000A, t0, t1);
   1055    TESTINST2("slti $t0, $t1, 0x00000001", 0x00000000, 0x00000001, t0, t1);
   1056    TESTINST2("slti $t0, $t1, 31", 0x00088000, 31, t0, t1);
   1057    TESTINST2("slti $t0, $t1, 16", 0x00010000, 16, t0, t1);
   1058    TESTINST2("slti $t0, $t1, 17", 0x00010000, 17, t0, t1);
   1059    TESTINST2("slti $t0, $t1, 18", 0x00010000, 18, t0, t1);
   1060    TESTINST2("slti $t0, $t1, 0", 0, 0, t0, t1);
   1061 
   1062    printf("SLTIU\n");
   1063    TESTINST2("sltiu $t0, $t1, 0x00000000", 0x00000001, 0x31415927, t0, t1);
   1064    TESTINST2("sltiu $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
   1065    TESTINST2("sltiu $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
   1066    TESTINST2("sltiu $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
   1067    TESTINST2("sltiu $t0, $t1, 0x00000010", 0x00000010, 0x00000010, t0, t1);
   1068    TESTINST2("sltiu $t0, $t1, 0x0000001F", 0x00000010, 0x31415927, t0, t1);
   1069    TESTINST2("sltiu $t0, $t1, 0x00000009", 0x31415927, 0x00000009, t0, t1);
   1070    TESTINST2("sltiu $t0, $t1, 0x0000000A", 0x31415927, 0x0000000A, t0, t1);
   1071    TESTINST2("sltiu $t0, $t1, 0x00000000", 0x00088000, 0x0000000A, t0, t1);
   1072    TESTINST2("sltiu $t0, $t1, 0x00000001", 0x00000000, 0x00000001, t0, t1);
   1073    TESTINST2("sltiu $t0, $t1, 31", 0x00088000, 31, t0, t1);
   1074    TESTINST2("sltiu $t0, $t1, 16", 0x00010000, 16, t0, t1);
   1075    TESTINST2("sltiu $t0, $t1, 17", 0x00010000, 17, t0, t1);
   1076    TESTINST2("sltiu $t0, $t1, 18", 0x00010000, 18, t0, t1);
   1077    TESTINST2("sltiu $t0, $t1, 0", 0, 0, t0, t1);
   1078 
   1079    printf("SLTU\n");
   1080    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1081    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1082    TESTINST1("sltu $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1083    TESTINST1("sltu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1084    TESTINST1("sltu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1085    TESTINST1("sltu $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1086    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
   1087    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1088    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1089    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1090    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1091    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1092    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1093    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1094    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1095    TESTINST1("sltu $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1096    TESTINST1("sltu $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1097    TESTINST1("sltu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1098    TESTINST1("sltu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1099    TESTINST1("sltu $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1100    TESTINST1("sltu $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1101    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1102    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1103    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1104    TESTINST1("sltu $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1105    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1106    TESTINST1("sltu $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1107    TESTINST1("sltu $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1108    TESTINST1("sltu $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1109    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1110    TESTINST1("sltu $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1111    TESTINST1("sltu $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1112    TESTINST1("sltu $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1113    TESTINST1("sltu $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1114    TESTINST1("sltu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1115    TESTINST1("sltu $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1116    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
   1117    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1118    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
   1119    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
   1120    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
   1121    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
   1122    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
   1123    TESTINST1("sltu $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
   1124    TESTINST1("sltu $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
   1125    TESTINST1("sltu $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
   1126    TESTINST1("sltu $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
   1127    TESTINST1("sltu $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
   1128    TESTINST1("sltu $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
   1129    TESTINST1("sltu $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
   1130    TESTINST1("sltu $t0, $t1, $t2", 0, 0, t0, t1, t2);
   1131    TESTINST1("sltu $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
   1132 
   1133    printf("SRA\n");
   1134    TESTINST2("sra $t0, $t1, 0x00000000", 0x00000001, 0x31415927, t0, t1);
   1135    TESTINST2("sra $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
   1136    TESTINST2("sra $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
   1137    TESTINST2("sra $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
   1138    TESTINST2("sra $t0, $t1, 0x00000010", 0x00000010, 0x00000010, t0, t1);
   1139    TESTINST2("sra $t0, $t1, 0x0000001F", 0x00000010, 0x31415927, t0, t1);
   1140    TESTINST2("sra $t0, $t1, 0x00000009", 0x31415927, 0x00000009, t0, t1);
   1141    TESTINST2("sra $t0, $t1, 0x0000000A", 0x31415927, 0x0000000A, t0, t1);
   1142    TESTINST2("sra $t0, $t1, 0x00000000", 0x00088000, 0x0000000A, t0, t1);
   1143    TESTINST2("sra $t0, $t1, 0x00000001", 0x00000000, 0x00000001, t0, t1);
   1144    TESTINST2("sra $t0, $t1, 31", 0x00088000, 31, t0, t1);
   1145    TESTINST2("sra $t0, $t1, 16", 0x00010000, 16, t0, t1);
   1146    TESTINST2("sra $t0, $t1, 17", 0x00010000, 17, t0, t1);
   1147    TESTINST2("sra $t0, $t1, 18", 0x00010000, 18, t0, t1);
   1148    TESTINST2("sra $t0, $t1, 0", 0, 0, t0, t1);
   1149 
   1150    printf("SRAV\n");
   1151    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1152    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1153    TESTINST1("srav $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1154    TESTINST1("srav $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1155    TESTINST1("srav $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1156    TESTINST1("srav $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1157    TESTINST1("srav $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
   1158    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1159    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1160    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1161    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1162    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1163    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1164    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1165    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1166    TESTINST1("srav $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1167    TESTINST1("srav $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1168    TESTINST1("srav $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1169    TESTINST1("srav $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1170    TESTINST1("srav $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1171    TESTINST1("srav $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1172    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1173    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1174    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1175    TESTINST1("srav $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1176    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1177    TESTINST1("srav $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1178    TESTINST1("srav $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1179    TESTINST1("srav $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1180    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1181    TESTINST1("srav $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1182    TESTINST1("srav $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1183    TESTINST1("srav $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1184    TESTINST1("srav $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1185    TESTINST1("srav $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1186    TESTINST1("srav $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1187    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
   1188    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1189    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
   1190    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
   1191    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
   1192    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
   1193    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
   1194    TESTINST1("srav $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
   1195    TESTINST1("srav $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
   1196    TESTINST1("srav $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
   1197    TESTINST1("srav $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
   1198    TESTINST1("srav $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
   1199    TESTINST1("srav $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
   1200    TESTINST1("srav $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
   1201    TESTINST1("srav $t0, $t1, $t2", 0, 0, t0, t1, t2);
   1202    TESTINST1("srav $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
   1203 
   1204    printf("SRL\n");
   1205    TESTINST2("srl $t0, $t1, 0x00000000", 0x00000001, 0x31415927, t0, t1);
   1206    TESTINST2("srl $t0, $t1, 0x00000001", 0x31415927, 0x00000001, t0, t1);
   1207    TESTINST2("srl $t0, $t1, 0x00000002", 0x31415927, 0x00000002, t0, t1);
   1208    TESTINST2("srl $t0, $t1, 0x0000000F", 0x31415927, 0x0000000F, t0, t1);
   1209    TESTINST2("srl $t0, $t1, 0x00000010", 0x00000010, 0x00000010, t0, t1);
   1210    TESTINST2("srl $t0, $t1, 0x0000001F", 0x00000010, 0x31415927, t0, t1);
   1211    TESTINST2("srl $t0, $t1, 0x00000009", 0x31415927, 0x00000009, t0, t1);
   1212    TESTINST2("srl $t0, $t1, 0x0000000A", 0x31415927, 0x0000000A, t0, t1);
   1213    TESTINST2("srl $t0, $t1, 0x00000000", 0x00088000, 0x0000000A, t0, t1);
   1214    TESTINST2("srl $t0, $t1, 0x00000001", 0x00000000, 0x00000001, t0, t1);
   1215    TESTINST2("srl $t0, $t1, 31", 0x00088000, 31, t0, t1);
   1216    TESTINST2("srl $t0, $t1, 16", 0x00010000, 16, t0, t1);
   1217    TESTINST2("srl $t0, $t1, 17", 0x00010000, 17, t0, t1);
   1218    TESTINST2("srl $t0, $t1, 18", 0x00010000, 18, t0, t1);
   1219    TESTINST2("srl $t0, $t1, 0", 0, 0, t0, t1);
   1220 
   1221    printf("SRLV\n");
   1222    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1223    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1224    TESTINST1("srlv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1225    TESTINST1("srlv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1226    TESTINST1("srlv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1227    TESTINST1("srlv $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1228    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
   1229    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1230    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1231    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1232    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1233    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1234    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1235    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1236    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1237    TESTINST1("srlv $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1238    TESTINST1("srlv $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1239    TESTINST1("srlv $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1240    TESTINST1("srlv $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1241    TESTINST1("srlv $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1242    TESTINST1("srlv $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1243    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1244    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1245    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1246    TESTINST1("srlv $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1247    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1248    TESTINST1("srlv $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1249    TESTINST1("srlv $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1250    TESTINST1("srlv $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1251    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1252    TESTINST1("srlv $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1253    TESTINST1("srlv $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1254    TESTINST1("srlv $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1255    TESTINST1("srlv $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1256    TESTINST1("srlv $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1257    TESTINST1("srlv $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1258    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
   1259    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1260    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
   1261    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
   1262    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
   1263    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
   1264    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
   1265    TESTINST1("srlv $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
   1266    TESTINST1("srlv $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
   1267    TESTINST1("srlv $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
   1268    TESTINST1("srlv $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
   1269    TESTINST1("srlv $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
   1270    TESTINST1("srlv $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
   1271    TESTINST1("srlv $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
   1272    TESTINST1("srlv $t0, $t1, $t2", 0, 0, t0, t1, t2);
   1273    TESTINST1("srlv $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
   1274 
   1275    printf("SUBU\n");
   1276    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1277    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00001110, t0, t1, t2);
   1278    TESTINST1("subu $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1279    TESTINST1("subu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1280    TESTINST1("subu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1281    TESTINST1("subu $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1282    TESTINST1("subu $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
   1283    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1284    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1285    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1286    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1287    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1288    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1289    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1290    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1291    TESTINST1("subu $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1292    TESTINST1("subu $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1293    TESTINST1("subu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1294    TESTINST1("subu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1295    TESTINST1("subu $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1296    TESTINST1("subu $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1297    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1298    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1299    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1300    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1301    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1302    TESTINST1("subu $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1303    TESTINST1("subu $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1304    TESTINST1("subu $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1305    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1306    TESTINST1("subu $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1307    TESTINST1("subu $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1308    TESTINST1("subu $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1309    TESTINST1("subu $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1310    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1311    TESTINST1("subu $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1312    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000000, t0, t1, t2);
   1313    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000001, t0, t1, t2);
   1314    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000002, t0, t1, t2);
   1315    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x0000000F, t0, t1, t2);
   1316    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000010, t0, t1, t2);
   1317    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x0000001F, t0, t1, t2);
   1318    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000020, t0, t1, t2);
   1319    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x00000021, t0, t1, t2);
   1320    TESTINST1("subu $t0, $t1, $t2", 0x00088000, 0x00000000, t0, t1, t2);
   1321    TESTINST1("subu $t0, $t1, $t2", 0x00088000, 0x00000001, t0, t1, t2);
   1322    TESTINST1("subu $t0, $t1, $t2", 0x00088000, 31, t0, t1, t2);
   1323    TESTINST1("subu $t0, $t1, $t2", 0x00010000, 16, t0, t1, t2);
   1324    TESTINST1("subu $t0, $t1, $t2", 0x00010000, 17, t0, t1, t2);
   1325    TESTINST1("subu $t0, $t1, $t2", 0x00010000, 18, t0, t1, t2);
   1326    TESTINST1("subu $t0, $t1, $t2", 0, 0, t0, t1, t2);
   1327    TESTINST1("subu $t0, $t1, $t2", 0xffff, 0xffff, t0, t1, t2);
   1328 
   1329    printf("SUB\n");
   1330    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1331    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x27181728, t0, t1, t2);
   1332    TESTINST1("subu $t0, $t1, $t2", 0x31415927, 0x97181728, t0, t1, t2);
   1333    TESTINST1("subu $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1334    TESTINST1("subu $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1335    TESTINST1("subu $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1336    TESTINST1("subu $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1337    TESTINST1("subu $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1338    TESTINST1("subu $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1339    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1340    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1341    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1342    TESTINST1("subu $t0, $t1, $t2", 0x80000000, 0x7fffffff, t0, t1, t2);
   1343    TESTINST1("subu $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1344 
   1345    printf("XOR\n");
   1346    TESTINST1("xor $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1347    TESTINST1("xor $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1348    TESTINST1("xor $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1349    TESTINST1("xor $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1350    TESTINST1("xor $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1351    TESTINST1("xor $t0, $t1, $t2", 0,          0,          t0, t1, t2);
   1352    TESTINST1("xor $t0, $t1, $t2", 0x80000000, -1,         t0, t1, t2);
   1353    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1354    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0,          t0, t1, t2);
   1355    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1356    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1357    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1358    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1359    TESTINST1("xor $t0, $t1, $t2", 0x31415927, 0xffffffff, t0, t1, t2);
   1360    TESTINST1("xor $t0, $t1, $t2", 0x31415927, 0xee00ee00, t0, t1, t2);
   1361    TESTINST1("xor $t0, $t1, $t2", 0,          255,        t0, t1, t2);
   1362    TESTINST1("xor $t0, $t1, $t2", 1,          0,          t0, t1, t2);
   1363    TESTINST1("xor $t0, $t1, $t2", 0,          1,          t0, t1, t2);
   1364    TESTINST1("xor $t0, $t1, $t2", -1,         0,          t0, t1, t2);
   1365    TESTINST1("xor $t0, $t1, $t2", 0,          -1,         t0, t1, t2);
   1366    TESTINST1("xor $t0, $t1, $t2", 0,          0x80000000, t0, t1, t2);
   1367    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0,          t0, t1, t2);
   1368    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0x80000000, t0, t1, t2);
   1369    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0x80000000, t0, t1, t2);
   1370    TESTINST1("xor $t0, $t1, $t2", 0x80000000, 0xff000000, t0, t1, t2);
   1371    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0x0dd00000, t0, t1, t2);
   1372    TESTINST1("xor $t0, $t1, $t2", 0xffffffff, 0,          t0, t1, t2);
   1373    TESTINST1("xor $t0, $t1, $t2", 0,          0xffffffff, t0, t1, t2);
   1374    TESTINST1("xor $t0, $t1, $t2", 0xffffffff, 0xffffffff, t0, t1, t2);
   1375    TESTINST1("xor $t0, $t1, $t2", 0x7fffffff, 0x7fffffff, t0, t1, t2);
   1376    TESTINST1("xor $t0, $t1, $t2", 0x0000ffff, 0x0000ffff, t0, t1, t2);
   1377 
   1378    printf("XORI\n");
   1379    TESTINST2("xori $t0, $t1, 0xffff", 0x31415927, 0xffff, t0, t1);
   1380    TESTINST2("xori $t0, $t1, 0xee00", 0x31415927, 0xee00, t0, t1);
   1381    TESTINST2("xori $t0, $t1, 255", 0,          255,        t0, t1);
   1382    TESTINST2("xori $t0, $t1, 0", -1,         0,          t0, t1);
   1383    TESTINST2("xori $t0, $t1, 1", 0,          1,          t0, t1);
   1384    TESTINST2("xori $t0, $t1, 0", 0,          0,          t0, t1);
   1385    TESTINST2("xori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
   1386    TESTINST2("xori $t0, $t1, 0", 0x7fffffff, 0,          t0, t1);
   1387    TESTINST2("xori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
   1388    TESTINST2("xori $t0, $t1, 0x8000", 0x7fffffff, 0x8000, t0, t1);
   1389    TESTINST2("xori $t0, $t1, 0xff00", 0x80000000, 0xff00, t0, t1);
   1390    TESTINST2("xori $t0, $t1, 0x0dd0", 0x7fffffff, 0x0dd0, t0, t1);
   1391    TESTINST2("xori $t0, $t1, 0xffff", 0x31415927, 0xffff, t0, t1);
   1392    TESTINST2("xori $t0, $t1, 0xee00", 0x31415927, 0xee00, t0, t1);
   1393    TESTINST2("xori $t0, $t1, 255", 0,          255,        t0, t1);
   1394    TESTINST2("xori $t0, $t1, 0", 1,          0,          t0, t1);
   1395    TESTINST2("xori $t0, $t1, 1", 0,          1,          t0, t1);
   1396    TESTINST2("xori $t0, $t1, 0", -1,         0,          t0, t1);
   1397    TESTINST2("xori $t0, $t1, 0x8000", 0,          0x8000, t0, t1);
   1398    TESTINST2("xori $t0, $t1, 0", 0x8000, 0,          t0, t1);
   1399    TESTINST2("xori $t0, $t1, 0x8000", 0x80000000, 0x8000, t0, t1);
   1400    TESTINST2("xori $t0, $t1, 0x8000", 0x7fffffff, 0x8000, t0, t1);
   1401    TESTINST2("xori $t0, $t1, 0xff00", 0x80000000, 0xff00, t0, t1);
   1402    TESTINST2("xori $t0, $t1, 0x0dd0", 0x7fffffff, 0x0dd0, t0, t1);
   1403    TESTINST2("xori $t0, $t1, 0", 0xffff, 0,          t0, t1);
   1404    TESTINST2("xori $t0, $t1, 0xffff", 0,          0xffff, t0, t1);
   1405    TESTINST2("xori $t0, $t1, 0xffff", 0xffffffff, 0xffff, t0, t1);
   1406    TESTINST2("xori $t0, $t1, 0x7fff", 0x7fffffff, 0x7fff, t0, t1);
   1407    TESTINST2("xori $t0, $t1, 0x0000", 0x0000ffff, 0x0000, t0, t1);
   1408 
   1409    printf("MFHI MFLO\n");
   1410    TESTINSN_HILO(0x31415927);
   1411    TESTINSN_HILO(0);
   1412    TESTINSN_HILO(-1);
   1413    TESTINSN_HILO(0xffffffff);
   1414    TESTINSN_HILO(0x8000);
   1415    TESTINSN_HILO(0x80000000);
   1416    TESTINSN_HILO(0x0000ffff);
   1417    TESTINSN_HILO(0x7fff);
   1418    TESTINSN_HILO(0x0dd0);
   1419    TESTINSN_HILO(0xff00);
   1420 
   1421    return 0;
   1422 }
   1423