MoveIns.c revision 663860b1408516d02ebfcb3a9999a134e6cfb223
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 $" #FS ", "#offset"($t0)\n\t" \
172     instruction "\n\t" \
173     "mov.s %0, $" #FD"\n\t" \
174     : "=&f" (out) \
175	 : "r" (cc), "r" (fs_f) \
176	 : "t0", "t1", "cc", "memory" \
177	 ); \
178   printf("%s :: out: %f, cc: %d\n", \
179          instruction, out, cc); \
180}
181
182// movf.d fd, fs
183#define TESTINSNMOVE2d(instruction, FD, FS, cc, offset) \
184{ \
185   double out; \
186   int out1; \
187   int out2; \
188   __asm__ volatile( \
189     "li $t0, 1\n\t" \
190     "move $t1, %3\n\t" \
191     "mtc1 $t0, $f0\n\t" \
192     "mtc1 $t1, $f2\n\t" \
193     "c.eq.s $f0, $f2\n\t" \
194     "move $t0, %4\n\t" \
195     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
196     instruction "\n\t" \
197     "mov.d %0, $" #FD"\n\t" \
198     "mfc1 %1, $f4\n\t" \
199     "mfc1 %2, $f5\n\t" \
200     : "=&f" (out), "=&r" (out1), "=&r" (out2) \
201	 : "r" (cc), "r" (mem) \
202	 : "t0", "t1", "cc", "memory" \
203	 ); \
204   printf("%s :: out: 0x%x 0x%x, cc: %d\n", \
205          instruction, out1, out2, cc); \
206}
207
208// movn.s fd, fs, rt
209#define TESTINSNMOVEN1s(instruction, offset, RTval, FD, FS, RT) \
210{ \
211    float out; \
212    int out1; \
213   __asm__ volatile( \
214     "move $" #RT ", %3\n\t" \
215     "move $t0, %2\n\t" \
216     "lwc1 $" #FS ", "#offset"($t0)\n\t" \
217     "mtc1 $0, $" #FD "\n\t" \
218     instruction "\n\t" \
219     "mov.s %0, $" #FD"\n\t" \
220     "mfc1 %1, $" #FD"\n\t" \
221     : "=&f" (out), "=&r" (out1) \
222	 : "r" (fs_f), "r" (RTval) \
223	 : #RT, "cc", "memory" \
224	 ); \
225   printf("%s :: fs rt 0x%x\n", \
226          instruction, out1); \
227}
228
229// movn.d fd, fs, rt
230#define TESTINSNMOVEN1d(instruction, offset, RTval, FD, FS, RT) \
231{ \
232    double out; \
233    int out1; \
234   __asm__ volatile( \
235     "move $" #RT ", %3\n\t" \
236     "move $t0, %2\n\t" \
237     "ldc1 $" #FS ", "#offset"($t0)\n\t" \
238     "mtc1 $0, $" #FD "\n\t" \
239     "mtc1 $0, $" #FD + 1"\n\t" \
240     instruction "\n\t" \
241     "mov.d %0, $" #FD"\n\t" \
242     "mfc1 %1, $" #FD"\n\t" \
243     : "=&f" (out), "=&r" (out1) \
244	 : "r" (fs_f), "r" (RTval) \
245	 : #RT, "cc", "memory" \
246	 ); \
247   printf("%s :: fs %lf, rt 0x%x\n", \
248          instruction, out, out1); \
249}
250
251int main()
252{
253   printf("MFC1\n");
254   TESTINSNMOVE("mfc1 $t1, $f0",  0, f0, t1);
255   TESTINSNMOVE("mfc1 $t2, $f1", 4, f1, t2);
256   TESTINSNMOVE("mfc1 $t3, $f2",  8, f2, t3);
257   TESTINSNMOVE("mfc1 $t4, $f3", 12, f3, t4);
258   TESTINSNMOVE("mfc1 $t5, $f4", 16, f4, t5);
259   TESTINSNMOVE("mfc1 $t6, $f5", 20, f5, t6);
260   TESTINSNMOVE("mfc1 $t7, $f6", 24, f6, t7);
261   TESTINSNMOVE("mfc1 $v0, $f7", 28, f7, v0);
262   TESTINSNMOVE("mfc1 $v1, $f8", 32, f8, v1);
263   TESTINSNMOVE("mfc1 $s0, $f9", 36, f9, s0);
264   TESTINSNMOVE("mfc1 $s1, $f10", 40, f10, s1);
265   TESTINSNMOVE("mfc1 $s2, $f11", 44, f11, s2);
266   TESTINSNMOVE("mfc1 $s3, $f12", 48, f12, s3);
267   TESTINSNMOVE("mfc1 $s4, $f13", 52, f13, s4);
268   TESTINSNMOVE("mfc1 $s5, $f14", 56, f14, s5);
269   TESTINSNMOVE("mfc1 $s6, $f15", 60, f15, s6);
270   TESTINSNMOVE("mfc1 $s7, $f16", 64, f16, s7);
271   TESTINSNMOVE("mfc1 $a0, $f17", 0, f17, a0);
272   TESTINSNMOVE("mfc1 $a1, $f18", 4, f18, a1);
273   TESTINSNMOVE("mfc1 $a2, $f19", 8, f19, a2);
274   TESTINSNMOVE("mfc1 $a3, $f20", 12, f20, a3);
275   TESTINSNMOVE("mfc1 $v0, $f21", 16, f21, v0);
276   TESTINSNMOVE("mfc1 $v1, $f22", 20, f22, v1);
277   TESTINSNMOVE("mfc1 $t8, $f23", 24, f23, t8);
278   TESTINSNMOVE("mfc1 $t9, $f24", 28, f24, t9);
279   TESTINSNMOVE("mfc1 $t1, $f25", 32, f25, t1);
280   TESTINSNMOVE("mfc1 $t2, $f26", 36, f26, t2);
281
282   printf("MTC1\n");
283   TESTINSNMOVEt("mtc1 $t1, $f0",  0, f0, t1);
284   TESTINSNMOVEt("mtc1 $t2, $f1", 4, f1, t2);
285   TESTINSNMOVEt("mtc1 $t3, $f2",  8, f2, t3);
286   TESTINSNMOVEt("mtc1 $t4, $f3", 12, f3, t4);
287   TESTINSNMOVEt("mtc1 $t5, $f4", 16, f4, t5);
288   TESTINSNMOVEt("mtc1 $t6, $f5", 20, f5, t6);
289   TESTINSNMOVEt("mtc1 $t7, $f6", 24, f6, t7);
290   TESTINSNMOVEt("mtc1 $v0, $f7", 28, f7, v0);
291   TESTINSNMOVEt("mtc1 $v1, $f8", 32, f8, v1);
292   TESTINSNMOVEt("mtc1 $s0, $f9", 36, f9, s0);
293   TESTINSNMOVEt("mtc1 $s1, $f10", 40, f10, s1);
294   TESTINSNMOVEt("mtc1 $s2, $f11", 44, f11, s2);
295   TESTINSNMOVEt("mtc1 $s3, $f12", 48, f12, s3);
296   TESTINSNMOVEt("mtc1 $s4, $f13", 52, f13, s4);
297   TESTINSNMOVEt("mtc1 $s5, $f14", 56, f14, s5);
298   TESTINSNMOVEt("mtc1 $s6, $f15", 60, f15, s6);
299   TESTINSNMOVEt("mtc1 $s7, $f16", 64, f16, s7);
300   TESTINSNMOVEt("mtc1 $a0, $f17", 2, f17, a0);
301   TESTINSNMOVEt("mtc1 $a1, $f18", 6, f18, a1);
302   TESTINSNMOVEt("mtc1 $a2, $f19", 10, f19, a2);
303   TESTINSNMOVEt("mtc1 $a3, $f20", 14, f20, a3);
304   TESTINSNMOVEt("mtc1 $v0, $f21", 18, f21, v0);
305   TESTINSNMOVEt("mtc1 $v1, $f22", 22, f22, v1);
306   TESTINSNMOVEt("mtc1 $t8, $f23", 26, f23, t8);
307   TESTINSNMOVEt("mtc1 $t9, $f24", 30, f24, t9);
308   TESTINSNMOVEt("mtc1 $t1, $f25", 34, f25, t1);
309   TESTINSNMOVEt("mtc1 $t2, $f26", 38, f26, t2);
310
311   printf("MOV.S\n");
312   TESTINSNMOVE1s("mov.s $f0, $f0",  0, f0, f0);
313   TESTINSNMOVE1s("mov.s $f0, $f1", 4, f0, f1);
314   TESTINSNMOVE1s("mov.s $f1, $f2",  8, f1, f2);
315   TESTINSNMOVE1s("mov.s $f2, $f3", 12, f2, f3);
316   TESTINSNMOVE1s("mov.s $f3, $f4", 16, f3, f4);
317   TESTINSNMOVE1s("mov.s $f4, $f5", 20, f4, f5);
318   TESTINSNMOVE1s("mov.s $f5, $f6", 24, f5, f6);
319   TESTINSNMOVE1s("mov.s $f6, $f7", 28, f6, f7);
320   TESTINSNMOVE1s("mov.s $f7, $f8", 32, f7, f8);
321   TESTINSNMOVE1s("mov.s $f8, $f9", 36, f8, f9);
322   TESTINSNMOVE1s("mov.s $f9, $f10", 40, f9, f10);
323   TESTINSNMOVE1s("mov.s $f10, $f11", 44, f10, f11);
324   TESTINSNMOVE1s("mov.s $f11, $f12", 48, f11, f12);
325   TESTINSNMOVE1s("mov.s $f12, $f13", 52, f12, f13);
326   TESTINSNMOVE1s("mov.s $f13, $f14", 56, f13, f14);
327   TESTINSNMOVE1s("mov.s $f14, $f15", 60, f14, f15);
328   TESTINSNMOVE1s("mov.s $f15, $f16", 64, f15, f16);
329   TESTINSNMOVE1s("mov.s $f16, $f17", 0, f16, f17);
330   TESTINSNMOVE1s("mov.s $f17, $f18", 4, f17, f18);
331   TESTINSNMOVE1s("mov.s $f18, $f19", 8, f18, f19);
332   TESTINSNMOVE1s("mov.s $f19, $f20", 12, f19, f20);
333   TESTINSNMOVE1s("mov.s $f20, $f21", 16, f20, f21);
334   TESTINSNMOVE1s("mov.s $f21, $f22", 20, f21, f22);
335   TESTINSNMOVE1s("mov.s $f22, $f23", 24, f22, f23);
336   TESTINSNMOVE1s("mov.s $f23, $f24", 28, f23, f24);
337   TESTINSNMOVE1s("mov.s $f24, $f25", 32, f24, f25);
338   TESTINSNMOVE1s("mov.s $f25, $f26", 36, f25, f26);
339
340   printf("MOV.D\n");
341   TESTINSNMOVE1d("mov.d $f0, $f0",  0, f0, f0);
342   TESTINSNMOVE1d("mov.d $f0, $f0", 8, f0, f0);
343   TESTINSNMOVE1d("mov.d $f0, $f2",  16, f0, f2);
344   TESTINSNMOVE1d("mov.d $f2, $f4", 24, f2, f4);
345   TESTINSNMOVE1d("mov.d $f2, $f4", 32, f2, f4);
346   TESTINSNMOVE1d("mov.d $f4, $f6", 40, f4, f6);
347   TESTINSNMOVE1d("mov.d $f4, $f6", 48, f4, f6);
348   TESTINSNMOVE1d("mov.d $f6, $f8", 56, f6, f8);
349   TESTINSNMOVE1d("mov.d $f6, $f8", 64, f6, f8);
350   TESTINSNMOVE1d("mov.d $f8, $f10", 0, f8, f10);
351   TESTINSNMOVE1d("mov.d $f8, $f10", 8, f8, f10);
352   TESTINSNMOVE1d("mov.d $f10, $f12", 16, f10, f12);
353   TESTINSNMOVE1d("mov.d $f10, $f12", 24, f10, f12);
354   TESTINSNMOVE1d("mov.d $f12, $f14", 32, f12, f14);
355   TESTINSNMOVE1d("mov.d $f12, $f14", 40, f12, f14);
356   TESTINSNMOVE1d("mov.d $f14, $f16", 48, f14, f16);
357   TESTINSNMOVE1d("mov.d $f14, $f16", 56, f14, f16);
358   TESTINSNMOVE1d("mov.d $f16, $f18", 64, f16, f18);
359   TESTINSNMOVE1d("mov.d $f16, $f18", 0, f16, f18);
360   TESTINSNMOVE1d("mov.d $f18, $f20", 8, f18, f20);
361   TESTINSNMOVE1d("mov.d $f18, $f20", 16, f18, f20);
362   TESTINSNMOVE1d("mov.d $f20, $f22", 24, f20, f22);
363   TESTINSNMOVE1d("mov.d $f20, $f22", 32, f20, f22);
364   TESTINSNMOVE1d("mov.d $f22, $f24", 40, f22, f24);
365   TESTINSNMOVE1d("mov.d $f22, $f24", 48, f22, f24);
366   TESTINSNMOVE1d("mov.d $f24, $f26", 56, f24, f26);
367   TESTINSNMOVE1d("mov.d $f24, $f26", 64, f24, f26);
368
369   printf("MOVF\n");
370   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, 0xffffffff, t0, t1, 1);
371   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 0xffffffff, t0, t1, 0);
372   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  555, 0xffffffff, t0, t1, 1);
373   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, 5, t0, t1, 0);
374   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0, -1, t0, t1, 1);
375   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 25, t0, t1, 0);
376   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 0, t0, t1, 1);
377   TESTINSNMOVE2("movf $t0, $t1, $fcc0",  0xffffffff, 66, t0, t1, 0);
378   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, 0xffffffff, t0, t1, 1);
379   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 0xffffffff, t0, t1, 0);
380   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  555, 0xffffffff, t0, t1, 1);
381   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, 5, t0, t1, 0);
382   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0, -1, t0, t1, 1);
383   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 25, t0, t1, 0);
384   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 0, t0, t1, 1);
385   TESTINSNMOVE2("movf $t0, $t1, $fcc4",  0xffffffff, 66, t0, t1, 0);
386
387   printf("MOVF.S\n");
388   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 0);
389   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 4);
390   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 8);
391   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 12);
392   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 16);
393   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 20);
394   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 24);
395   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 28);
396   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 32);
397   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 36)
398   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 40)
399   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 44)
400   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 48)
401   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 52)
402   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 1, 56)
403   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 0);
404   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 4);
405   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 8);
406   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 12);
407   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 16);
408   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 20);
409   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 24);
410   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 28);
411   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 32);
412   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 36);
413   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 40);
414   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 44);
415   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 48);
416   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 52);
417   TESTINSNMOVE2s("movf.s $f4, $f6, $fcc0", f4, f6, 0, 56);
418
419   printf("MOVF.D\n");
420   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 0);
421   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 8);
422   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 16);
423   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 24);
424   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 32);
425   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 40);
426   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 48);
427   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 56);
428   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 64);
429   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 0)
430   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 8)
431   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 16)
432   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 24)
433   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 32)
434   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 1, 40)
435   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 48);
436   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 56);
437   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 64);
438   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 0);
439   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 8);
440   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 16);
441   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 24);
442   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 32);
443   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 40);
444   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 48);
445   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 56);
446   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 64);
447   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 0);
448   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 8);
449   TESTINSNMOVE2d("movf.d $f4, $f6, $fcc0", f4, f6, 0, 16);
450
451   printf("MOVN.S\n");
452   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 0, 0, f0, f2, t3);
453   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 4, 1, f0, f2, t3);
454   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
455   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 12, -1, f0, f2, t3);
456   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 16, 5, f0, f2, t3);
457   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 20, 0, f0, f2, t3);
458   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
459   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 28, 5, f0, f2, t3);
460   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 32, 125487, f0, f2, t3);
461   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 36, 68, f0, f2, t3);
462   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 40, -122544, f0, f2, t3);
463   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 44, 0, f0, f2, t3);
464   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 48, 0, f0, f2, t3);
465   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
466   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
467   TESTINSNMOVEN1s("movn.s $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
468
469   printf("MOVN.D\n");
470   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 0, 0, f0, f2, t3);
471   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 4, 1, f0, f2, t3);
472   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
473   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 12, -1, f0, f2, t3);
474   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 16, 5, f0, f2, t3);
475   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 20, 0, f0, f2, t3);
476   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 24, 0, f0, f2, t3);
477   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 28, 5, f0, f2, t3);
478   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 32, 125487, f0, f2, t3);
479   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 36, 68, f0, f2, t3);
480   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 40, -122544, f0, f2, t3);
481   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 44, 0, f0, f2, t3);
482   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 48, 0, f0, f2, t3);
483   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
484   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
485   TESTINSNMOVEN1s("movn.d $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
486
487   printf("MOVT\n");
488   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, 0xffffffff, t0, t1, 1);
489   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 0xffffffff, t0, t1, 0);
490   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  555, 0xffffffff, t0, t1, 1);
491   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, 5, t0, t1, 0);
492   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0, -1, t0, t1, 1);
493   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 25, t0, t1, 0);
494   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 0, t0, t1, 1);
495   TESTINSNMOVE2("movt $t0, $t1, $fcc0",  0xffffffff, 66, t0, t1, 0);
496   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, 0xffffffff, t0, t1, 1);
497   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 0xffffffff, t0, t1, 0);
498   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  555, 0xffffffff, t0, t1, 1);
499   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, 5, t0, t1, 0);
500   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0, -1, t0, t1, 1);
501   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 25, t0, t1, 0);
502   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 0, t0, t1, 1);
503   TESTINSNMOVE2("movt $t0, $t1, $fcc4",  0xffffffff, 66, t0, t1, 0);
504
505   printf("MOVT.S\n");
506   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 0);
507   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 4);
508   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 8);
509   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 12);
510   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 16);
511   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 20);
512   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 24);
513   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 28);
514   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 32);
515   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 36)
516   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 40)
517   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 44)
518   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 48)
519   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 52)
520   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 1, 56)
521   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 0);
522   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 4);
523   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 8);
524   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 12);
525   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 16);
526   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 20);
527   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 24);
528   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 28);
529   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 32);
530   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 36);
531   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 40);
532   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 44);
533   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 48);
534   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 52);
535   TESTINSNMOVE2s("movt.s $f4, $f6, $fcc0", f4, f6, 0, 56);
536
537   printf("MOVT.D\n");
538   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 0);
539   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 8);
540   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 16);
541   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 24);
542   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 32);
543   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 40);
544   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 48);
545   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 56);
546   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 64);
547   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 0)
548   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 8)
549   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 16)
550   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 24)
551   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 32)
552   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 1, 40)
553   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 48);
554   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 56);
555   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 64);
556   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 0);
557   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 8);
558   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 16);
559   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 24);
560   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 32);
561   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 40);
562   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 48);
563   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 56);
564   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 64);
565   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 0);
566   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 8);
567   TESTINSNMOVE2d("movt.d $f4, $f6, $fcc0", f4, f6, 0, 16);
568
569   printf("MOVZ.S\n");
570   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 0, 0, f0, f2, t3);
571   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 4, 1, f0, f2, t3);
572   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
573   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 12, -1, f0, f2, t3);
574   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 16, 5, f0, f2, t3);
575   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 20, 0, f0, f2, t3);
576   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
577   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 24, 0, f0, f2, t3);
578   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 28, 5, f0, f2, t3);
579   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 32, 125487, f0, f2, t3);
580   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 36, 68, f0, f2, t3);
581   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 40, -122544, f0, f2, t3);
582   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 44, 0, f0, f2, t3);
583   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 48, 0, f0, f2, t3);
584   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
585   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
586   TESTINSNMOVEN1s("movz.s $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
587
588   printf("MOVZ.D\n");
589   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 0, 0, f0, f2, t3);
590   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 4, 1, f0, f2, t3);
591   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 8, 0xffff, f0, f2, t3);
592   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 12, -1, f0, f2, t3);
593   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 16, 5, f0, f2, t3);
594   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 20, 0, f0, f2, t3);
595   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 24, 0, f0, f2, t3);
596   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 28, 5, f0, f2, t3);
597   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 32, 125487, f0, f2, t3);
598   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 36, 68, f0, f2, t3);
599   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 40, -122544, f0, f2, t3);
600   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 44, 0, f0, f2, t3);
601   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 48, 0, f0, f2, t3);
602   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 52, 0xffffffff, f0, f2, t3);
603   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 56, 0x80000000, f0, f2, t3);
604   TESTINSNMOVEN1s("movz.d $f0, $f2, $t3", 60, 0x7fffffff, f0, f2, t3);
605   return 0;
606}
607