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 $" #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
main()251 int 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