1 #include <stdio.h>
2
3 const 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
12 unsigned 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
main()280 int 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