1#include <stdio.h>
2
3const float fs_f[] = {
4   0, 456.2489562, 3, -1,
5   1384.6, -7.2945676, 1000000000, -5786.47,
6   1752, 0.0024575, 0.00000001, -248562.76,
7   -45786.476, 456.2489562, 34.00046, 45786.476,
8   1752065, 107, -45667.24, -7.2945676,
9   -347856.475, 356047.56, -1.0, 23.04
10};
11
12unsigned int mem[] = {
13   0x4095A266, 0x66666666,
14   0xBFF00000, 0x00000000,
15   0x3FF00000, 0x00000000,
16   0x252a2e2b, 0x262d2d2a,
17   0xFFFFFFFF, 0xFFFFFFFF,
18   0x41D26580, 0xB487E5C9,
19   0x42026580, 0xB750E388,
20   0x3E45798E, 0xE2308C3A,
21   0x3FBF9ADD, 0x3746F65F
22};
23
24// mfc1 rt, fs
25#define TESTINSNMOVE(instruction, offset, FS, RT) \
26{ \
27    float out; \
28    int out1; \
29   __asm__ volatile( \
30     "move $t0, %2\n\t" \
31     "lwc1 $" #FS ", "#offset"($t0)\n\t" \
32     instruction "\n\t" \
33     "mov.s %0, $" #FS"\n\t" \
34     "move %1, $" #RT "\n\t" \
35     : "=&f" (out), "=&r" (out1) \
36	 : "r" (mem) \
37	 : #RT, "cc", "memory" \
38	 ); \
39   printf("%s :: fs %f, rt 0x%x\n", \
40          instruction, out, out1); \
41}
42
43// mfhc1 rt, fs
44#define TESTINSNMOVEd(instruction, offset, FS, RT) \
45{ \
46    double out; \
47    int out1; \
48   __asm__ volatile( \
49     "move $t0, %2\n\t" \
50     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
51     instruction "\n\t" \
52     "mov.d %0, $" #FS"\n\t" \
53     "move %1, $" #RT "\n\t" \
54     : "=&f" (out), "=&r" (out1) \
55	 : "r" (mem) \
56	 : #RT, "cc", "memory" \
57	 ); \
58   printf("%s :: fs %lf, rt 0x%x\n", \
59          instruction, out, out1); \
60}
61
62// mtc1 rt, fs
63#define TESTINSNMOVEt(instruction, offset, FS, RT) \
64{ \
65    float out; \
66    int out1; \
67   __asm__ volatile( \
68     "move $t0, %2\n\t" \
69     "lw $" #RT ", "#offset"($t0)\n\t" \
70     instruction "\n\t" \
71     "mov.s %0, $" #FS"\n\t" \
72     "move %1, $" #RT "\n\t" \
73     : "=&f" (out), "=&r" (out1) \
74	 : "r" (mem) \
75	 : #RT, "cc", "memory" \
76	 ); \
77   printf("%s :: fs %f, rt 0x%x\n", \
78          instruction, out, out1); \
79}
80
81// mthc1 rt, fs
82#define TESTINSNMOVEtd(instruction, offset, FS, RT) \
83{ \
84    double out; \
85    int out1; \
86   __asm__ volatile( \
87     "move $t0, %2\n\t" \
88     "lw $" #RT ", "#offset"($t0)\n\t" \
89     instruction "\n\t" \
90     "mov.d %0, $" #FS"\n\t" \
91     "move %1, $" #RT "\n\t" \
92     : "=&f" (out), "=&r" (out1) \
93	 : "r" (mem) \
94	 : #RT, "cc", "memory" \
95	 ); \
96   printf("%s :: fs %lf, rt 0x%x\n", \
97          instruction, out, out1); \
98}
99
100// mov.s fd, fs
101#define TESTINSNMOVE1s(instruction, offset, FD, FS) \
102{ \
103    float out; \
104    int out1; \
105   __asm__ volatile( \
106     "move $t0, %2\n\t" \
107     "lwc1 $" #FS ", "#offset"($t0)\n\t" \
108     instruction "\n\t" \
109     "mov.s %0, $" #FD"\n\t" \
110     "mfc1 %1, $" #FD"\n\t" \
111     : "=&f" (out), "=&r" (out1) \
112	 : "r" (fs_f) \
113	 : "cc", "memory" \
114	 ); \
115   printf("%s :: fs %f, rt 0x%x\n", \
116          instruction, out, out1); \
117}
118
119// mov.d fd, fs
120#define TESTINSNMOVE1d(instruction, offset, FD, FS) \
121{ \
122    double out; \
123    int out1; \
124   __asm__ volatile( \
125     "move $t0, %2\n\t" \
126     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
127     instruction "\n\t" \
128     "mov.d %0, $" #FD"\n\t" \
129     "mfc1 %1, $" #FD"\n\t" \
130     : "=&f" (out), "=&r" (out1) \
131	 : "r" (fs_f) \
132	 : "cc", "memory" \
133	 ); \
134   printf("%s ::fs %f, rt 0x%x\n", \
135          instruction, out, out1); \
136}
137
138// movf rd, rs
139#define TESTINSNMOVE2(instruction, RDval, RSval, RD, RS, cc) \
140{ \
141    int out; \
142   __asm__ volatile( \
143     "li $t0, 1\n\t" \
144     "move $t1, %3\n\t" \
145     "mtc1 $t0, $f0\n\t" \
146     "mtc1 $t1, $f2\n\t" \
147     "c.eq.s $f0, $f2\n\t" \
148     "move $" #RS ", %1\n\t" \
149     "move $" #RD ", %2\n\t" \
150     instruction "\n\t" \
151     "move %0, $" #RD "\n\t" \
152     : "=&r" (out) \
153	 : "r" (RSval), "r" (RDval), "r" (cc) \
154	 : "t0", "t1", #RD, #RS, "cc", "memory" \
155	 ); \
156   printf("%s :: out: 0x%x, RDval: 0x%x, RSval: 0x%x, cc: %d\n", \
157          instruction, out, RDval, RSval, cc); \
158}
159
160// movf.s fd, fs
161#define TESTINSNMOVE2s(instruction, FD, FS, cc, offset) \
162{ \
163   float out; \
164   __asm__ volatile( \
165     "li $t0, 1\n\t" \
166     "move $t1, %1\n\t" \
167     "mtc1 $t0, $f0\n\t" \
168     "mtc1 $t1, $f2\n\t" \
169     "c.eq.s $f0, $f2\n\t" \
170     "move $t0, %2\n\t" \
171     "lwc1 $" #FD ", 4($t0)\n\t" \
172     "lwc1 $" #FS ", "#offset"($t0)\n\t" \
173     instruction "\n\t" \
174     "mov.s %0, $" #FD"\n\t" \
175     : "=&f" (out) \
176	 : "r" (cc), "r" (fs_f) \
177	 : "t0", "t1", "cc", "memory" \
178	 ); \
179   printf("%s :: out: %f, cc: %d\n", \
180          instruction, out, cc); \
181}
182
183// movf.d fd, fs
184#if (__mips_fpr==64)
185#define TESTINSNMOVE2d(instruction, FD, FS, cc, offset) \
186{ \
187   double out; \
188   int out1; \
189   int out2; \
190   __asm__ volatile( \
191     "li $t0, 1\n\t" \
192     "mtc1 $t0, $f0\n\t" \
193     "mtc1 %3,  $f2\n\t" \
194     "move $t0, %4\n\t" \
195     "ldc1 $f4, 8($t0)\n\t" \
196     "c.eq.s $f0, $f2\n\t" \
197     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
198     instruction "\n\t" \
199     "mov.d %0, $" #FD"\n\t" \
200     "mfc1 %1, $f4\n\t" \
201     "mfhc1 %2, $f4\n\t" \
202     : "=&f" (out), "=&r" (out1), "=&r" (out2) \
203	 : "r" (cc), "r" (mem) \
204	 : "t0", "t1", "cc", "memory" \
205	 ); \
206   printf("%s :: out: 0x%x 0x%x, cc: %d\n", \
207          instruction, out1, out2, cc); \
208}
209#else
210#define TESTINSNMOVE2d(instruction, FD, FS, cc, offset) \
211{ \
212   double out; \
213   int out1; \
214   int out2; \
215   __asm__ volatile( \
216     "li $t0, 1\n\t" \
217     "move $t1, %3\n\t" \
218     "mtc1 $t0, $f0\n\t" \
219     "mtc1 $t1, $f2\n\t" \
220     "move $t0, %4\n\t" \
221     "ldc1 $f4, 8($t0)\n\t" \
222     "c.eq.s $f0, $f2\n\t" \
223     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
224     instruction "\n\t" \
225     "mov.d %0, $" #FD"\n\t" \
226     "mfc1 %1, $f4\n\t" \
227     "mfc1 %2, $f5\n\t" \
228     : "=&f" (out), "=&r" (out1), "=&r" (out2) \
229	 : "r" (cc), "r" (mem) \
230	 : "t0", "t1", "cc", "memory" \
231	 ); \
232   printf("%s :: out: 0x%x 0x%x, cc: %d\n", \
233          instruction, out1, out2, cc); \
234}
235#endif
236
237// movn.s fd, fs, rt
238#define TESTINSNMOVEN1s(instruction, offset, RTval, FD, FS, RT) \
239{ \
240    float out; \
241    int out1; \
242   __asm__ volatile( \
243     "move $" #RT ", %3\n\t" \
244     "move $t0, %2\n\t" \
245     "lwc1 $" #FS ", "#offset"($t0)\n\t" \
246     "mtc1 $0, $" #FD "\n\t" \
247     instruction "\n\t" \
248     "mov.s %0, $" #FD"\n\t" \
249     "mfc1 %1, $" #FD"\n\t" \
250     : "=&f" (out), "=&r" (out1) \
251	 : "r" (fs_f), "r" (RTval) \
252	 : #RT, "cc", "memory" \
253	 ); \
254   printf("%s :: fs rt 0x%x\n", \
255          instruction, out1); \
256}
257
258// movn.d fd, fs, rt
259#define TESTINSNMOVEN1d(instruction, offset, RTval, FD, FS, RT) \
260{ \
261    double out; \
262    int out1; \
263   __asm__ volatile( \
264     "move $" #RT ", %3\n\t" \
265     "move $t0, %2\n\t" \
266     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
267     "mtc1 $0, $" #FD "\n\t" \
268     "mtc1 $0, $" #FD + 1"\n\t" \
269     instruction "\n\t" \
270     "mov.d %0, $" #FD"\n\t" \
271     "mfc1 %1, $" #FD"\n\t" \
272     : "=&f" (out), "=&r" (out1) \
273	 : "r" (fs_f), "r" (RTval) \
274	 : #RT, "cc", "memory" \
275	 ); \
276   printf("%s :: fs %lf, rt 0x%x\n", \
277          instruction, out, out1); \
278}
279
280int main()
281{
282   printf("MFC1\n");
283   TESTINSNMOVE("mfc1 $t1, $f0",  0, f0, t1);
284   TESTINSNMOVE("mfc1 $t2, $f1", 4, f1, t2);
285   TESTINSNMOVE("mfc1 $t3, $f2",  8, f2, t3);
286   TESTINSNMOVE("mfc1 $t4, $f3", 12, f3, t4);
287   TESTINSNMOVE("mfc1 $t5, $f4", 16, f4, t5);
288   TESTINSNMOVE("mfc1 $t6, $f5", 20, f5, t6);
289   TESTINSNMOVE("mfc1 $t7, $f6", 24, f6, t7);
290   TESTINSNMOVE("mfc1 $v0, $f7", 28, f7, v0);
291   TESTINSNMOVE("mfc1 $v1, $f8", 32, f8, v1);
292   TESTINSNMOVE("mfc1 $s0, $f9", 36, f9, s0);
293   TESTINSNMOVE("mfc1 $s1, $f10", 40, f10, s1);
294   TESTINSNMOVE("mfc1 $s2, $f11", 44, f11, s2);
295   TESTINSNMOVE("mfc1 $s3, $f12", 48, f12, s3);
296   TESTINSNMOVE("mfc1 $s4, $f13", 52, f13, s4);
297   TESTINSNMOVE("mfc1 $s5, $f14", 56, f14, s5);
298   TESTINSNMOVE("mfc1 $s6, $f15", 60, f15, s6);
299   TESTINSNMOVE("mfc1 $s7, $f16", 64, f16, s7);
300   TESTINSNMOVE("mfc1 $a0, $f17", 0, f17, a0);
301   TESTINSNMOVE("mfc1 $a1, $f18", 4, f18, a1);
302   TESTINSNMOVE("mfc1 $a2, $f19", 8, f19, a2);
303   TESTINSNMOVE("mfc1 $a3, $f20", 12, f20, a3);
304   TESTINSNMOVE("mfc1 $v0, $f21", 16, f21, v0);
305   TESTINSNMOVE("mfc1 $v1, $f22", 20, f22, v1);
306   TESTINSNMOVE("mfc1 $t8, $f23", 24, f23, t8);
307   TESTINSNMOVE("mfc1 $t9, $f24", 28, f24, t9);
308   TESTINSNMOVE("mfc1 $t1, $f25", 32, f25, t1);
309   TESTINSNMOVE("mfc1 $t2, $f26", 36, f26, t2);
310
311   printf("MTC1\n");
312   TESTINSNMOVEt("mtc1 $t1, $f0",  0, f0, t1);
313   TESTINSNMOVEt("mtc1 $t2, $f1", 4, f1, t2);
314   TESTINSNMOVEt("mtc1 $t3, $f2",  8, f2, t3);
315   TESTINSNMOVEt("mtc1 $t4, $f3", 12, f3, t4);
316   TESTINSNMOVEt("mtc1 $t5, $f4", 16, f4, t5);
317   TESTINSNMOVEt("mtc1 $t6, $f5", 20, f5, t6);
318   TESTINSNMOVEt("mtc1 $t7, $f6", 24, f6, t7);
319   TESTINSNMOVEt("mtc1 $v0, $f7", 28, f7, v0);
320   TESTINSNMOVEt("mtc1 $v1, $f8", 32, f8, v1);
321   TESTINSNMOVEt("mtc1 $s0, $f9", 36, f9, s0);
322   TESTINSNMOVEt("mtc1 $s1, $f10", 40, f10, s1);
323   TESTINSNMOVEt("mtc1 $s2, $f11", 44, f11, s2);
324   TESTINSNMOVEt("mtc1 $s3, $f12", 48, f12, s3);
325   TESTINSNMOVEt("mtc1 $s4, $f13", 52, f13, s4);
326   TESTINSNMOVEt("mtc1 $s5, $f14", 56, f14, s5);
327   TESTINSNMOVEt("mtc1 $s6, $f15", 60, f15, s6);
328   TESTINSNMOVEt("mtc1 $s7, $f16", 64, f16, s7);
329   TESTINSNMOVEt("mtc1 $a0, $f17", 2, f17, a0);
330   TESTINSNMOVEt("mtc1 $a1, $f18", 6, f18, a1);
331   TESTINSNMOVEt("mtc1 $a2, $f19", 10, f19, a2);
332   TESTINSNMOVEt("mtc1 $a3, $f20", 14, f20, a3);
333   TESTINSNMOVEt("mtc1 $v0, $f21", 18, f21, v0);
334   TESTINSNMOVEt("mtc1 $v1, $f22", 22, f22, v1);
335   TESTINSNMOVEt("mtc1 $t8, $f23", 26, f23, t8);
336   TESTINSNMOVEt("mtc1 $t9, $f24", 30, f24, t9);
337   TESTINSNMOVEt("mtc1 $t1, $f25", 34, f25, t1);
338   TESTINSNMOVEt("mtc1 $t2, $f26", 38, f26, t2);
339
340   printf("MOV.S\n");
341   TESTINSNMOVE1s("mov.s $f0, $f0",  0, f0, f0);
342   TESTINSNMOVE1s("mov.s $f0, $f1", 4, f0, f1);
343   TESTINSNMOVE1s("mov.s $f1, $f2",  8, f1, f2);
344   TESTINSNMOVE1s("mov.s $f2, $f3", 12, f2, f3);
345   TESTINSNMOVE1s("mov.s $f3, $f4", 16, f3, f4);
346   TESTINSNMOVE1s("mov.s $f4, $f5", 20, f4, f5);
347   TESTINSNMOVE1s("mov.s $f5, $f6", 24, f5, f6);
348   TESTINSNMOVE1s("mov.s $f6, $f7", 28, f6, f7);
349   TESTINSNMOVE1s("mov.s $f7, $f8", 32, f7, f8);
350   TESTINSNMOVE1s("mov.s $f8, $f9", 36, f8, f9);
351   TESTINSNMOVE1s("mov.s $f9, $f10", 40, f9, f10);
352   TESTINSNMOVE1s("mov.s $f10, $f11", 44, f10, f11);
353   TESTINSNMOVE1s("mov.s $f11, $f12", 48, f11, f12);
354   TESTINSNMOVE1s("mov.s $f12, $f13", 52, f12, f13);
355   TESTINSNMOVE1s("mov.s $f13, $f14", 56, f13, f14);
356   TESTINSNMOVE1s("mov.s $f14, $f15", 60, f14, f15);
357   TESTINSNMOVE1s("mov.s $f15, $f16", 64, f15, f16);
358   TESTINSNMOVE1s("mov.s $f16, $f17", 0, f16, f17);
359   TESTINSNMOVE1s("mov.s $f17, $f18", 4, f17, f18);
360   TESTINSNMOVE1s("mov.s $f18, $f19", 8, f18, f19);
361   TESTINSNMOVE1s("mov.s $f19, $f20", 12, f19, f20);
362   TESTINSNMOVE1s("mov.s $f20, $f21", 16, f20, f21);
363   TESTINSNMOVE1s("mov.s $f21, $f22", 20, f21, f22);
364   TESTINSNMOVE1s("mov.s $f22, $f23", 24, f22, f23);
365   TESTINSNMOVE1s("mov.s $f23, $f24", 28, f23, f24);
366   TESTINSNMOVE1s("mov.s $f24, $f25", 32, f24, f25);
367   TESTINSNMOVE1s("mov.s $f25, $f26", 36, f25, f26);
368
369   printf("MOV.D\n");
370   TESTINSNMOVE1d("mov.d $f0, $f0",  0, f0, f0);
371   TESTINSNMOVE1d("mov.d $f0, $f0", 8, f0, f0);
372   TESTINSNMOVE1d("mov.d $f0, $f2",  16, f0, f2);
373   TESTINSNMOVE1d("mov.d $f2, $f4", 24, f2, f4);
374   TESTINSNMOVE1d("mov.d $f2, $f4", 32, f2, f4);
375   TESTINSNMOVE1d("mov.d $f4, $f6", 40, f4, f6);
376   TESTINSNMOVE1d("mov.d $f4, $f6", 48, f4, f6);
377   TESTINSNMOVE1d("mov.d $f6, $f8", 56, f6, f8);
378   TESTINSNMOVE1d("mov.d $f6, $f8", 64, f6, f8);
379   TESTINSNMOVE1d("mov.d $f8, $f10", 0, f8, f10);
380   TESTINSNMOVE1d("mov.d $f8, $f10", 8, f8, f10);
381   TESTINSNMOVE1d("mov.d $f10, $f12", 16, f10, f12);
382   TESTINSNMOVE1d("mov.d $f10, $f12", 24, f10, f12);
383   TESTINSNMOVE1d("mov.d $f12, $f14", 32, f12, f14);
384   TESTINSNMOVE1d("mov.d $f12, $f14", 40, f12, f14);
385   TESTINSNMOVE1d("mov.d $f14, $f16", 48, f14, f16);
386   TESTINSNMOVE1d("mov.d $f14, $f16", 56, f14, f16);
387   TESTINSNMOVE1d("mov.d $f16, $f18", 64, f16, f18);
388   TESTINSNMOVE1d("mov.d $f16, $f18", 0, f16, f18);
389   TESTINSNMOVE1d("mov.d $f18, $f20", 8, f18, f20);
390   TESTINSNMOVE1d("mov.d $f18, $f20", 16, f18, f20);
391   TESTINSNMOVE1d("mov.d $f20, $f22", 24, f20, f22);
392   TESTINSNMOVE1d("mov.d $f20, $f22", 32, f20, f22);
393   TESTINSNMOVE1d("mov.d $f22, $f24", 40, f22, f24);
394   TESTINSNMOVE1d("mov.d $f22, $f24", 48, f22, f24);
395   TESTINSNMOVE1d("mov.d $f24, $f26", 56, f24, f26);
396   TESTINSNMOVE1d("mov.d $f24, $f26", 64, f24, f26);
397
398   printf("MOVF\n");
399   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, 0xffffffff, t0, t1, 1);
400   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 0xffffffff, t0, t1, 0);
401   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  555, 0xffffffff, t0, t1, 1);
402   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, 5, t0, t1, 0);
403   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, -1, t0, t1, 1);
404   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 25, t0, t1, 0);
405   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 0, t0, t1, 1);
406   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 66, t0, t1, 0);
407   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, 0xffffffff, t0, t1, 1);
408   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 0xffffffff, t0, t1, 0);
409   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  555, 0xffffffff, t0, t1, 1);
410   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, 5, t0, t1, 0);
411   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, -1, t0, t1, 1);
412   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 25, t0, t1, 0);
413   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 0, t0, t1, 1);
414   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 66, t0, t1, 0);
415
416   printf("MOVF.S\n");
417   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 0);
418   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 4);
419   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 8);
420   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 12);
421   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 16);
422   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 20);
423   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 24);
424   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 28);
425   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 32);
426   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 36)
427   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 40)
428   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 44)
429   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 48)
430   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 52)
431   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 56)
432   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 0);
433   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 4);
434   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 8);
435   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 12);
436   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 16);
437   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 20);
438   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 24);
439   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 28);
440   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 32);
441   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 36);
442   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 40);
443   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 44);
444   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 48);
445   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 52);
446   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 56);
447
448   printf("MOVF.D\n");
449   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 0);
450   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 8);
451   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 16);
452   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 24);
453   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 32);
454   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 40);
455   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 48);
456   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 56);
457   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 64);
458   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 0)
459   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 8)
460   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 16)
461   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 24)
462   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 32)
463   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 40)
464   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 48);
465   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 56);
466   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 64);
467   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 0);
468   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 8);
469   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 16);
470   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 24);
471   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 32);
472   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 40);
473   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 48);
474   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 56);
475   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 64);
476   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 0);
477   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 8);
478   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 16);
479
480   printf("MOVN.S\n");
481   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 0, 0, f0, f2, t3);
482   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 4, 1, f0, f2, t3);
483   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
484   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 12, -1, f0, f2, t3);
485   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 16, 5, f0, f2, t3);
486   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 20, 0, f0, f2, t3);
487   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
488   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 28, 5, f0, f2, t3);
489   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 32, 125487, f0, f2, t3);
490   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 36, 68, f0, f2, t3);
491   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 40, -122544, f0, f2, t3);
492   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 44, 0, f0, f2, t3);
493   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 48, 0, f0, f2, t3);
494   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
495   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
496   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
497
498   printf("MOVN.D\n");
499   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 0, 0, f0, f2, t3);
500   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 4, 1, f0, f2, t3);
501   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
502   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 12, -1, f0, f2, t3);
503   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 16, 5, f0, f2, t3);
504   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 20, 0, f0, f2, t3);
505   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 24, 0, f0, f2, t3);
506   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 28, 5, f0, f2, t3);
507   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 32, 125487, f0, f2, t3);
508   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 36, 68, f0, f2, t3);
509   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 40, -122544, f0, f2, t3);
510   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 44, 0, f0, f2, t3);
511   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 48, 0, f0, f2, t3);
512   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
513   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
514   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
515
516   printf("MOVT\n");
517   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, 0xffffffff, t0, t1, 1);
518   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 0xffffffff, t0, t1, 0);
519   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  555, 0xffffffff, t0, t1, 1);
520   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, 5, t0, t1, 0);
521   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, -1, t0, t1, 1);
522   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 25, t0, t1, 0);
523   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 0, t0, t1, 1);
524   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 66, t0, t1, 0);
525   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, 0xffffffff, t0, t1, 1);
526   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 0xffffffff, t0, t1, 0);
527   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  555, 0xffffffff, t0, t1, 1);
528   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, 5, t0, t1, 0);
529   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, -1, t0, t1, 1);
530   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 25, t0, t1, 0);
531   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 0, t0, t1, 1);
532   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 66, t0, t1, 0);
533
534   printf("MOVT.S\n");
535   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 0);
536   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 4);
537   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 8);
538   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 12);
539   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 16);
540   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 20);
541   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 24);
542   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 28);
543   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 32);
544   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 36)
545   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 40)
546   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 44)
547   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 48)
548   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 52)
549   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 56)
550   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 0);
551   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 4);
552   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 8);
553   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 12);
554   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 16);
555   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 20);
556   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 24);
557   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 28);
558   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 32);
559   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 36);
560   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 40);
561   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 44);
562   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 48);
563   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 52);
564   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 56);
565
566   printf("MOVT.D\n");
567   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 0);
568   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 8);
569   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 16);
570   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 24);
571   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 32);
572   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 40);
573   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 48);
574   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 56);
575   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 64);
576   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 0)
577   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 8)
578   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 16)
579   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 24)
580   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 32)
581   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 40)
582   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 48);
583   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 56);
584   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 64);
585   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 0);
586   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 8);
587   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 16);
588   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 24);
589   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 32);
590   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 40);
591   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 48);
592   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 56);
593   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 64);
594   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 0);
595   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 8);
596   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 16);
597
598   printf("MOVZ.S\n");
599   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 0, 0, f0, f2, t3);
600   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 4, 1, f0, f2, t3);
601   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
602   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 12, -1, f0, f2, t3);
603   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 16, 5, f0, f2, t3);
604   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 20, 0, f0, f2, t3);
605   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
606   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
607   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 28, 5, f0, f2, t3);
608   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 32, 125487, f0, f2, t3);
609   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 36, 68, f0, f2, t3);
610   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 40, -122544, f0, f2, t3);
611   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 44, 0, f0, f2, t3);
612   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 48, 0, f0, f2, t3);
613   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
614   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
615   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
616
617   printf("MOVZ.D\n");
618   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 0, 0, f0, f2, t3);
619   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 4, 1, f0, f2, t3);
620   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
621   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 12, -1, f0, f2, t3);
622   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 16, 5, f0, f2, t3);
623   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 20, 0, f0, f2, t3);
624   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 24, 0, f0, f2, t3);
625   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 28, 5, f0, f2, t3);
626   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 32, 125487, f0, f2, t3);
627   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 36, 68, f0, f2, t3);
628   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 40, -122544, f0, f2, t3);
629   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 44, 0, f0, f2, t3);
630   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 48, 0, f0, f2, t3);
631   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
632   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
633   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
634   return 0;
635}
636