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 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