MIPS32int.c revision 663860b1408516d02ebfcb3a9999a134e6cfb223
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
87const 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
130int 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