1 // data cache pre-fetch: 2 3 // 1111 1001 1010 0110 Rm.. 0000; dcpf (Rm) 4 8.0xf9+8.0xa6+4.RN2,4.0000:D1a:::dcpf 5 "dcpf" 6 *am33_2 7 { 8 int srcreg; 9 10 PC = cia; 11 12 srcreg = translate_rreg (SD_, RN2); 13 load_word (State.regs[srcreg]); 14 } 15 16 // 1111 1001 1010 0111 0000 0000; dcpf (sp) 17 8.0xf9+8.0xa7+8.0x00:D1b:::dcpf 18 "dcpf" 19 *am33_2 20 { 21 PC = cia; 22 23 load_word (SP); 24 } 25 26 // 1111 1011 1010 0110 Ri.. Rm.. 0000 0000; dcpf (Ri,Rm) 27 8.0xfb+8.0xa6+4.RN2,4.RN0+8.0x00:D2a:::dcpf 28 "dcpf" 29 *am33_2 30 { 31 int srci, srcm; 32 33 PC = cia; 34 35 srci = translate_rreg (SD_, RN2); 36 srcm = translate_rreg (SD_, RN0); 37 38 load_word (State.regs[srci] + State.regs[srcm]); 39 } 40 41 // 1111 1011 1010 0111 Rm.. 0000 IMM8; dcpf (d8,Rm) 42 8.0xfb+8.0xa7+4.RN2,4.0000+8.IMM8:D2b:::dcpf 43 "dcpf" 44 *am33_2 45 { 46 int srcreg; 47 48 PC = cia; 49 50 srcreg = translate_rreg (SD_, RN2); 51 52 load_word (State.regs[srcreg] + EXTEND8 (IMM8)); 53 } 54 55 // 1111 1101 1010 0111 Rm.. 0000 IMM24; dcpf (d24,Rm) 56 8.0xfd+8.0xa7+4.RN2,4.0000+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::dcpf 57 "dcpf" 58 *am33_2 59 { 60 int srcreg; 61 62 PC = cia; 63 64 srcreg = translate_rreg (SD_, RN2); 65 66 load_word (State.regs[srcreg] + EXTEND24 (FETCH24 (IMM24A, 67 IMM24B, IMM24C))); 68 } 69 70 // 1111 1110 0100 0110 Rm.. 0000 IMM32; dcpf (d32,Rm) 71 8.0xfe+8.0x46+4.RN2,4.0000+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::dcpf 72 "dcpf" 73 *am33_2 74 { 75 int srcreg; 76 77 PC = cia; 78 79 srcreg = translate_rreg (SD_, RN2); 80 81 load_word (State.regs[srcreg] 82 + FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D)); 83 } 84 85 // bit operations with imm8,(abs16) addressing mode: 86 87 // 1111 1110 1000 0010 ABS16 IMM8; btst imm8,(abs16) 88 8.0xfe+8.0x82+8.IMM16A+8.IMM16B+8.IMM8:D3:::btst 89 "btst" 90 *am33_2 91 { 92 PC = cia; 93 genericBtst (IMM8, FETCH16 (IMM16A, IMM16B)); 94 } 95 96 // 1111 1110 1000 0000 ABS16 IMM8; bset imm8,(abs16) 97 8.0xfe+8.0x80+8.IMM16A+8.IMM16B+8.IMM8:D3:::bset 98 "bset" 99 *am33_2 100 { 101 uint32_t temp; 102 int z; 103 104 PC = cia; 105 temp = load_byte (FETCH16 (IMM16A, IMM16B)); 106 z = (temp & IMM8) == 0; 107 temp |= IMM8; 108 store_byte (FETCH16 (IMM16A, IMM16B), temp); 109 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V); 110 PSW |= (z ? PSW_Z : 0); 111 } 112 113 // 1111 1110 1000 0001 ABS16 IMM8; bclr imm8,(abs16) 114 8.0xfe+8.0x81+8.IMM16A+8.IMM16B+8.IMM8:D3:::bclr 115 "bclr" 116 *am33_2 117 { 118 uint32_t temp; 119 int z; 120 121 PC = cia; 122 temp = load_byte (FETCH16 (IMM16A, IMM16B)); 123 z = (temp & IMM8) == 0; 124 temp = temp & ~(IMM8); 125 store_byte (FETCH16 (IMM16A, IMM16B), temp); 126 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V); 127 PSW |= (z ? PSW_Z : 0); 128 } 129 130 // single precision fmov: 131 132 // 1111 1001 0010 000X Rm.. Sn..; fmov (Rm),FSn 133 8.0xf9+4.2,3.0,1.X+4.Rm,4.Sn:D1a:::fmov 134 "fmov" 135 *am33_2 136 { 137 PC = cia; 138 139 if (FPU_DISABLED) 140 fpu_disabled_exception (SD, CPU, cia); 141 else 142 { 143 int reg = translate_rreg (SD_, Rm); 144 XS2FS (X,Sn) = load_word (State.regs[reg]); 145 } 146 } 147 148 // 1111 1001 0010 001X Rm.. Sn..; fmov (Rm+),FSn 149 8.0xf9+4.2,3.1,1.X+4.Rm,4.Sn:D1b:::fmov 150 "fmov" 151 *am33_2 152 { 153 PC = cia; 154 155 if (FPU_DISABLED) 156 fpu_disabled_exception (SD, CPU, cia); 157 else 158 { 159 int reg = translate_rreg (SD_, Rm); 160 XS2FS (X,Sn) = load_word (State.regs[reg]); 161 State.regs[reg] += 4; 162 } 163 } 164 165 // 1111 1001 0010 010X ---- Sn..; fmov (SP),FSn 166 8.0xf9+4.2,3.2,1.X+4.0,4.Sn:D1c:::fmov 167 "fmov" 168 *am33_2 169 { 170 PC = cia; 171 172 if (FPU_DISABLED) 173 fpu_disabled_exception (SD, CPU, cia); 174 else 175 { 176 int reg = REG_SP; 177 XS2FS (X,Sn) = load_word (State.regs[reg]); 178 } 179 } 180 181 // 1111 1001 0010 011X Rm.. Sn..; fmov Rm,FSn 182 8.0xf9+4.2,3.3,1.X+4.Rm,4.Sn:D1d:::fmov 183 "fmov" 184 *am33_2 185 { 186 PC = cia; 187 188 if (FPU_DISABLED) 189 fpu_disabled_exception (SD, CPU, cia); 190 else 191 { 192 int reg = translate_rreg (SD_, Rm); 193 XS2FS (X,Sn) = State.regs[reg]; 194 } 195 } 196 197 // 1111 1001 0011 00Y0 Sm.. Rn..; fmov FSm,(Rn) 198 8.0xf9+4.3,2.0,1.Y,1.0+4.Sm,4.Rn:D1e:::fmov 199 "fmov" 200 *am33_2 201 { 202 PC = cia; 203 204 if (FPU_DISABLED) 205 fpu_disabled_exception (SD, CPU, cia); 206 else 207 { 208 int reg = translate_rreg (SD_, Rn); 209 store_word (State.regs[reg], XS2FS (Y,Sm)); 210 } 211 } 212 213 // 1111 1001 0011 00Y1 Sm.. Rn..; fmov FSm,(Rn+) 214 8.0xf9+4.3,2.0,1.Y,1.1+4.Sm,4.Rn:D1f:::fmov 215 "fmov" 216 *am33_2 217 { 218 PC = cia; 219 220 if (FPU_DISABLED) 221 fpu_disabled_exception (SD, CPU, cia); 222 else 223 { 224 int reg = translate_rreg (SD_, Rn); 225 store_word (State.regs[reg], XS2FS (Y,Sm)); 226 State.regs[reg] += 4; 227 } 228 } 229 230 // 1111 1001 0011 01Y0 Sm.. ----; fmov FSm,(SP) 231 8.0xf9+4.3,2.1,1.Y,1.0+4.Sm,4.0:D1g:::fmov 232 "fmov" 233 *am33_2 234 { 235 PC = cia; 236 237 if (FPU_DISABLED) 238 fpu_disabled_exception (SD, CPU, cia); 239 else 240 { 241 int reg = REG_SP; 242 store_word (State.regs[reg], XS2FS (Y,Sm)); 243 } 244 } 245 246 // 1111 1001 0011 01Y1 Sm.. Rn..; fmov FSm,Rn 247 8.0xf9+4.3,2.1,1.Y,1.1+4.Sm,4.Rn:D1h:::fmov 248 "fmov" 249 *am33_2 250 { 251 PC = cia; 252 253 if (FPU_DISABLED) 254 fpu_disabled_exception (SD, CPU, cia); 255 else 256 { 257 int reg = translate_rreg (SD_, Rn); 258 State.regs[reg] = XS2FS (Y,Sm); 259 } 260 } 261 262 // 1111 1001 0100 00YX Sm.. Sn..; fmov FSm,FSn 263 8.0xf9+4.4,2.0,1.Y,1.X+4.Sm,4.Sn:D1i:::fmov 264 "fmov" 265 *am33_2 266 { 267 PC = cia; 268 269 if (FPU_DISABLED) 270 fpu_disabled_exception (SD, CPU, cia); 271 else 272 XS2FS (X,Sn) = XS2FS (Y,Sm); 273 } 274 275 // 1111 1011 0010 000X Rm.. Sn.. d8; fmov (d8,Rm),FSn 276 8.0xfb+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM8:D2a:::fmov 277 "fmov" 278 *am33_2 279 { 280 PC = cia; 281 282 if (FPU_DISABLED) 283 fpu_disabled_exception (SD, CPU, cia); 284 else 285 { 286 int reg = translate_rreg (SD_, Rm); 287 XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8)); 288 } 289 } 290 291 // 1111 1011 0010 001X Rm.. Sn.. d8; fmov (Rm+,imm8),FSn 292 8.0xfb+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM8:D2b:::fmov 293 "fmov" 294 *am33_2 295 { 296 PC = cia; 297 298 if (FPU_DISABLED) 299 fpu_disabled_exception (SD, CPU, cia); 300 else 301 { 302 int reg = translate_rreg (SD_, Rm); 303 XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8)); 304 State.regs[reg] += 4; 305 } 306 } 307 308 // 1111 1011 0010 010X ---- Sn.. d8; fmov (d8,SP),FSn 309 8.0xfb+4.2,3.2,1.X+4.0,4.Sn+8.IMM8:D2c:::fmov 310 "fmov" 311 *am33_2 312 { 313 PC = cia; 314 315 if (FPU_DISABLED) 316 fpu_disabled_exception (SD, CPU, cia); 317 else 318 { 319 int reg = REG_SP; 320 XS2FS (X, Sn) = load_word (State.regs[reg] + IMM8); 321 } 322 } 323 324 // 1111 1011 0010 0111 Ri.. Rm.. Sn.. --Z-; fmov (Ri,Rm),FSn 325 8.0xfb+8.0x27+4.Ri,4.Rm+4.Sn,2.0,1.Z,1.0:D2d:::fmov 326 "fmov" 327 *am33_2 328 { 329 PC = cia; 330 331 if (FPU_DISABLED) 332 fpu_disabled_exception (SD, CPU, cia); 333 else 334 { 335 int ri = translate_rreg (SD_, Ri); 336 int rm = translate_rreg (SD_, Rm); 337 XS2FS (Z, Sn) = load_word (State.regs[ri] + State.regs[rm]); 338 } 339 } 340 341 // 1111 1011 0011 00Y0 Sm.. Rn.. d8; fmov FSm,(d8,Rn) 342 8.0xfb+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM8:D2e:::fmov 343 "fmov" 344 *am33_2 345 { 346 PC = cia; 347 348 if (FPU_DISABLED) 349 fpu_disabled_exception (SD, CPU, cia); 350 else 351 { 352 int reg = translate_rreg (SD_, Rn); 353 store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm)); 354 } 355 } 356 357 // 1111 1011 0011 00Y1 Sm.. Rn.. d8; fmov FSm,(Rn+,d8) 358 8.0xfb+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM8:D2f:::fmov 359 "fmov" 360 *am33_2 361 { 362 PC = cia; 363 364 if (FPU_DISABLED) 365 fpu_disabled_exception (SD, CPU, cia); 366 else 367 { 368 int reg = translate_rreg (SD_, Rn); 369 store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm)); 370 State.regs[reg] += 4; 371 } 372 } 373 374 // 1111 1011 0011 01Y0 Sm.. ---- d8; fmov FSm,(d8,SP) 375 8.0xfb+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM8:D2g:::fmov 376 "fmov" 377 *am33_2 378 { 379 PC = cia; 380 381 if (FPU_DISABLED) 382 fpu_disabled_exception (SD, CPU, cia); 383 else 384 { 385 int reg = REG_SP; 386 store_word (State.regs[reg] + IMM8, XS2FS (Y, Sm)); 387 } 388 } 389 390 // 1111 1011 0011 0111 Ri.. Rm.. Sm.. --Z-; fmov FSm,(Ri,Rm) 391 8.0xfb+8.0x37+4.Ri,4.Rm+4.Sm,2.0,1.Z,1.0:D2h:::fmov 392 "fmov" 393 *am33_2 394 { 395 PC = cia; 396 397 if (FPU_DISABLED) 398 fpu_disabled_exception (SD, CPU, cia); 399 else 400 { 401 int ri = translate_rreg (SD_, Ri); 402 int rm = translate_rreg (SD_, Rm); 403 store_word (State.regs[ri] + State.regs[rm], XS2FS (Z, Sm)); 404 } 405 } 406 407 // 1111 1101 0010 000X Rm.. Sn.. d24; fmov (d24,Rm),FSn 408 8.0xfd+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::fmov 409 "fmov" 410 *am33_2 411 { 412 PC = cia; 413 414 if (FPU_DISABLED) 415 fpu_disabled_exception (SD, CPU, cia); 416 else 417 { 418 int reg = translate_rreg (SD_, Rm); 419 XS2FS (X, Sn) = load_word (State.regs[reg] 420 + EXTEND24 (FETCH24 (IMM24A, 421 IMM24B, IMM24C))); 422 } 423 } 424 425 // 1111 1101 0010 001X Rm.. Sn.. d24; fmov (Rm+,imm24),FSn 426 8.0xfd+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4b:::fmov 427 "fmov" 428 *am33_2 429 { 430 PC = cia; 431 432 if (FPU_DISABLED) 433 fpu_disabled_exception (SD, CPU, cia); 434 else 435 { 436 int reg = translate_rreg (SD_, Rm); 437 XS2FS (X, Sn) = load_word (State.regs[reg] 438 + EXTEND24 (FETCH24 (IMM24A, 439 IMM24B, IMM24C))); 440 State.regs[reg] += 4; 441 } 442 } 443 444 // 1111 1101 0010 010X ---- Sn.. d24; fmov (d24,SP),FSn 445 8.0xfd+4.2,3.2,1.X+4.0,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4c:::fmov 446 "fmov" 447 *am33_2 448 { 449 PC = cia; 450 451 if (FPU_DISABLED) 452 fpu_disabled_exception (SD, CPU, cia); 453 else 454 { 455 int reg = REG_SP; 456 XS2FS (X, Sn) = load_word (State.regs[reg] + FETCH24 (IMM24A, 457 IMM24B, IMM24C)); 458 } 459 } 460 461 // 1111 1101 0011 00Y0 Sm.. Rn.. d24; fmov FSm,(d24,Rn) 462 8.0xfd+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4e:::fmov 463 "fmov" 464 *am33_2 465 { 466 PC = cia; 467 468 if (FPU_DISABLED) 469 fpu_disabled_exception (SD, CPU, cia); 470 else 471 { 472 int reg = translate_rreg (SD_, Rn); 473 store_word (State.regs[reg] 474 + EXTEND24 (FETCH24 (IMM24A, 475 IMM24B, IMM24C)), XS2FS (Y, Sm)); 476 } 477 } 478 479 // 1111 1101 0011 00Y1 Sm.. Rn.. d24; fmov FSm,(Rn+,d24) 480 8.0xfd+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4f:::fmov 481 "fmov" 482 *am33_2 483 { 484 PC = cia; 485 486 if (FPU_DISABLED) 487 fpu_disabled_exception (SD, CPU, cia); 488 else 489 { 490 int reg = translate_rreg (SD_, Rn); 491 store_word (State.regs[reg] 492 + EXTEND24 (FETCH24 (IMM24A, 493 IMM24B, IMM24C)), XS2FS (Y, Sm)); 494 State.regs[reg] += 4; 495 } 496 } 497 498 // 1111 1101 0011 01Y0 Sm.. ---- d24; fmov FSm,(d24,SP) 499 8.0xfd+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4g:::fmov 500 "fmov" 501 *am33_2 502 { 503 PC = cia; 504 505 if (FPU_DISABLED) 506 fpu_disabled_exception (SD, CPU, cia); 507 else 508 { 509 int reg = REG_SP; 510 store_word (State.regs[reg] 511 + FETCH24 (IMM24A, 512 IMM24B, IMM24C), XS2FS (Y, Sm)); 513 } 514 } 515 516 // 1111 1110 0010 000X Rm.. Sn.. d32; fmov (d32,Rm),FSn 517 8.0xfe+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::fmov 518 "fmov" 519 *am33_2 520 { 521 PC = cia; 522 523 if (FPU_DISABLED) 524 fpu_disabled_exception (SD, CPU, cia); 525 else 526 { 527 int reg = translate_rreg (SD_, Rm); 528 XS2FS (X, Sn) = load_word (State.regs[reg] 529 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 530 IMM32C, IMM32D))); 531 } 532 } 533 534 // 1111 1110 0010 001X Rm.. Sn.. d32; fmov (Rm+,imm32),FSn 535 8.0xfe+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5b:::fmov 536 "fmov" 537 *am33_2 538 { 539 PC = cia; 540 541 if (FPU_DISABLED) 542 fpu_disabled_exception (SD, CPU, cia); 543 else 544 { 545 int reg = translate_rreg (SD_, Rm); 546 XS2FS (X, Sn) = load_word (State.regs[reg] 547 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 548 IMM32C, IMM32D))); 549 State.regs[reg] += 4; 550 } 551 } 552 553 // 1111 1110 0010 010X ---- Sn.. d32; fmov (d32,SP),FSn 554 8.0xfe+4.2,3.2,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5c:::fmov 555 "fmov" 556 *am33_2 557 { 558 PC = cia; 559 560 if (FPU_DISABLED) 561 fpu_disabled_exception (SD, CPU, cia); 562 else 563 { 564 int reg = REG_SP; 565 XS2FS (X, Sn) = load_word (State.regs[reg] 566 + FETCH32 (IMM32A, IMM32B, 567 IMM32C, IMM32D)); 568 } 569 } 570 571 // 1111 1110 0010 011X ---- Sn.. d32; fmov imm32,FSn 572 8.0xfe+4.2,3.3,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5d:::fmov 573 "fmov" 574 *am33_2 575 { 576 PC = cia; 577 578 if (FPU_DISABLED) 579 fpu_disabled_exception (SD, CPU, cia); 580 else 581 XS2FS (X, Sn) = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 582 } 583 584 // 1111 1110 0011 00Y0 Sm.. Rn.. d32; fmov FSm,(d32,Rn) 585 8.0xfe+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5e:::fmov 586 "fmov" 587 *am33_2 588 { 589 PC = cia; 590 591 if (FPU_DISABLED) 592 fpu_disabled_exception (SD, CPU, cia); 593 else 594 { 595 int reg = translate_rreg (SD_, Rn); 596 store_word (State.regs[reg] 597 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 598 IMM32C, IMM32D)), XS2FS (Y, Sm)); 599 } 600 } 601 602 // 1111 1110 0011 00Y1 Sm.. Rn.. d32; fmov FSm,(Rn+,d32) 603 8.0xfe+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5f:::fmov 604 "fmov" 605 *am33_2 606 { 607 PC = cia; 608 609 if (FPU_DISABLED) 610 fpu_disabled_exception (SD, CPU, cia); 611 else 612 { 613 int reg = translate_rreg (SD_, Rn); 614 store_word (State.regs[reg] 615 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 616 IMM32C, IMM32D)), XS2FS (Y, Sm)); 617 State.regs[reg] += 4; 618 } 619 } 620 621 // 1111 1110 0011 01Y0 Sm.. ---- d32; fmov FSm,(d32,SP) 622 8.0xfe+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5g:::fmov 623 "fmov" 624 *am33_2 625 { 626 PC = cia; 627 628 if (FPU_DISABLED) 629 fpu_disabled_exception (SD, CPU, cia); 630 else 631 { 632 int reg = REG_SP; 633 store_word (State.regs[reg] 634 + FETCH32 (IMM32A, IMM32B, 635 IMM32C, IMM32D), XS2FS (Y, Sm)); 636 } 637 } 638 639 // double precision fmov: 640 641 // 1111 1001 1010 000X Rm.. fn.-; fmov (Rm),FDn 642 8.0xf9+4.0xa,3.0,1.X+4.Rm,3.fn,1.0:D1j:::fmov 643 "fmov" 644 *am33_2 645 { 646 PC = cia; 647 648 if (FPU_DISABLED) 649 fpu_disabled_exception (SD, CPU, cia); 650 else 651 { 652 int reg = translate_rreg (SD_, Rm); 653 Xf2FD (X,fn) = load_dword (State.regs[reg]); 654 } 655 } 656 657 // 1111 1001 1010 001X Rm.. fn.-; fmov (Rm+),FDn 658 8.0xf9+4.0xa,3.1,1.X+4.Rm,3.fn,1.0:D1k:::fmov 659 "fmov" 660 *am33_2 661 { 662 PC = cia; 663 664 if (FPU_DISABLED) 665 fpu_disabled_exception (SD, CPU, cia); 666 else 667 { 668 int reg = translate_rreg (SD_, Rm); 669 Xf2FD (X,fn) = load_dword (State.regs[reg]); 670 State.regs[reg] += 8; 671 } 672 } 673 674 // 1111 1001 1010 010X ---- fn.-; fmov (SP),FDn 675 8.0xf9+4.0xa,3.2,1.X+4.0,3.fn,1.0:D1l:::fmov 676 "fmov" 677 *am33_2 678 { 679 PC = cia; 680 681 if (FPU_DISABLED) 682 fpu_disabled_exception (SD, CPU, cia); 683 else 684 { 685 int reg = REG_SP; 686 Xf2FD (X,fn) = load_dword (State.regs[reg]); 687 } 688 } 689 690 // 1111 1001 1011 00Y0 fm.- Rn..; fmov FDm,(Rn) 691 8.0xf9+4.0xb,2.0,1.Y,1.0+3.fm,1.0,4.Rn:D1m:::fmov 692 "fmov" 693 *am33_2 694 { 695 PC = cia; 696 697 if (FPU_DISABLED) 698 fpu_disabled_exception (SD, CPU, cia); 699 else 700 { 701 int reg = translate_rreg (SD_, Rn); 702 store_dword (State.regs[reg], Xf2FD (Y,fm)); 703 } 704 } 705 706 // 1111 1001 1011 00Y1 fm.- Rn..; fmov FDm,(Rn+) 707 8.0xf9+4.0xb,2.0,1.Y,1.1+3.fm,1.0,4.Rn:D1n:::fmov 708 "fmov" 709 *am33_2 710 { 711 PC = cia; 712 713 if (FPU_DISABLED) 714 fpu_disabled_exception (SD, CPU, cia); 715 else 716 { 717 int reg = translate_rreg (SD_, Rn); 718 store_dword (State.regs[reg], Xf2FD (Y,fm)); 719 State.regs[reg] += 8; 720 } 721 } 722 723 // 1111 1001 1011 01Y0 fm.- ----; fmov FDm,(SP) 724 8.0xf9+4.0xb,2.1,1.Y,1.0+3.fm,1.0,4.0:D1o:::fmov 725 "fmov" 726 *am33_2 727 { 728 PC = cia; 729 730 if (FPU_DISABLED) 731 fpu_disabled_exception (SD, CPU, cia); 732 else 733 { 734 int reg = REG_SP; 735 store_dword (State.regs[reg], Xf2FD (Y,fm)); 736 } 737 } 738 739 // 1111 1001 1100 00YX fm.- fn.-; fmov FDm,FDn 740 8.0xf9+4.0xc,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1p:::fmov 741 "fmov" 742 *am33_2 743 { 744 PC = cia; 745 746 if (FPU_DISABLED) 747 fpu_disabled_exception (SD, CPU, cia); 748 else 749 fpu_unimp_exception (SD, CPU, cia); 750 } 751 752 // 1111 1011 0100 0111 Ri.. Rm.. fn.- --Z-; fmov (Ri,Rm),FDn 753 8.0xfb+8.0x47+4.Ri,4.Rm+3.fn,1.0,2.0,1.Z,1.0:D2i:::fmov 754 "fmov" 755 *am33_2 756 { 757 PC = cia; 758 759 if (FPU_DISABLED) 760 fpu_disabled_exception (SD, CPU, cia); 761 else 762 { 763 int ri = translate_rreg (SD_, Ri); 764 int rm = translate_rreg (SD_, Rm); 765 Xf2FD (Z,fn) = load_dword (State.regs[ri] + State.regs[rm]); 766 } 767 } 768 769 // 1111 1011 0101 0111 Ri.. Rn.. fm.- --Z-; fmov FDm,(Ri,Rn) 770 8.0xfb+8.0x57+4.Ri,4.Rn+3.fm,1.0,2.0,1.Z,1.0:D2j:::fmov 771 "fmov" 772 *am33_2 773 { 774 PC = cia; 775 776 if (FPU_DISABLED) 777 fpu_disabled_exception (SD, CPU, cia); 778 else 779 { 780 int ri = translate_rreg (SD_, Ri); 781 int rn = translate_rreg (SD_, Rn); 782 store_dword (State.regs[ri] + State.regs[rn], Xf2FD (Z,fm)); 783 } 784 } 785 786 // 1111 1011 1010 000X Rm.. fn.- d8; fmov (d8,Rm),FDn 787 8.0xfb+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM8:D2k:::fmov 788 "fmov" 789 *am33_2 790 { 791 PC = cia; 792 793 if (FPU_DISABLED) 794 fpu_disabled_exception (SD, CPU, cia); 795 else 796 { 797 int reg = translate_rreg (SD_, Rm); 798 Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8)); 799 } 800 } 801 802 // 1111 1011 1010 001X Rm.. fn.- d8; fmov (Rm+,imm8),FDn 803 8.0xfb+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM8:D2l:::fmov 804 "fmov" 805 *am33_2 806 { 807 PC = cia; 808 809 if (FPU_DISABLED) 810 fpu_disabled_exception (SD, CPU, cia); 811 else 812 { 813 int reg = translate_rreg (SD_, Rm); 814 Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8)); 815 State.regs[reg] += 8; 816 } 817 } 818 819 // 1111 1011 1010 010X ---- fn.- d8; fmov (d8,SP),FDn 820 8.0xfb+4.0xa,3.2,1.X+4.0,4.fn+8.IMM8:D2m:::fmov 821 "fmov" 822 *am33_2 823 { 824 PC = cia; 825 826 if (FPU_DISABLED) 827 fpu_disabled_exception (SD, CPU, cia); 828 else 829 { 830 int reg = REG_SP; 831 Xf2FD (X, fn) = load_dword (State.regs[reg] + IMM8); 832 } 833 } 834 835 // 1111 1011 1011 00Y0 fm.- Rn.. d8; fmov FDm,(d8,Rn) 836 8.0xfb+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM8:D2n:::fmov 837 "fmov" 838 *am33_2 839 { 840 PC = cia; 841 842 if (FPU_DISABLED) 843 fpu_disabled_exception (SD, CPU, cia); 844 else 845 { 846 int reg = translate_rreg (SD_, Rn); 847 store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm)); 848 } 849 } 850 851 // 1111 1011 1011 00Y1 fm.- Rn.. d8; fmov FDm,(Rn+,d8) 852 8.0xfb+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM8:D2o:::fmov 853 "fmov" 854 *am33_2 855 { 856 PC = cia; 857 858 if (FPU_DISABLED) 859 fpu_disabled_exception (SD, CPU, cia); 860 else 861 { 862 int reg = translate_rreg (SD_, Rn); 863 store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm)); 864 State.regs[reg] += 8; 865 } 866 } 867 868 // 1111 1011 1011 01Y0 fm.- ---- d8; fmov FDm,(d8,SP) 869 8.0xfb+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM8:D2p:::fmov 870 "fmov" 871 *am33_2 872 { 873 PC = cia; 874 875 if (FPU_DISABLED) 876 fpu_disabled_exception (SD, CPU, cia); 877 else 878 { 879 int reg = REG_SP; 880 store_dword (State.regs[reg] + IMM8, Xf2FD (Y, fm)); 881 } 882 } 883 884 // 1111 1101 1010 000X Rm.. fn.- d24; fmov (d24,Rm),FDn 885 8.0xfd+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4k:::fmov 886 "fmov" 887 *am33_2 888 { 889 PC = cia; 890 891 if (FPU_DISABLED) 892 fpu_disabled_exception (SD, CPU, cia); 893 else 894 { 895 int reg = translate_rreg (SD_, Rm); 896 Xf2FD (X, fn) = load_dword (State.regs[reg] 897 + EXTEND24 (FETCH24 (IMM24A, 898 IMM24B, IMM24C))); 899 } 900 } 901 902 // 1111 1101 1010 001X Rm.. fn.- d24; fmov (Rm+,imm24),FDn 903 8.0xfd+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4l:::fmov 904 "fmov" 905 *am33_2 906 { 907 PC = cia; 908 909 if (FPU_DISABLED) 910 fpu_disabled_exception (SD, CPU, cia); 911 else 912 { 913 int reg = translate_rreg (SD_, Rm); 914 Xf2FD (X, fn) = load_dword (State.regs[reg] 915 + EXTEND24 (FETCH24 (IMM24A, 916 IMM24B, IMM24C))); 917 State.regs[reg] += 8; 918 } 919 } 920 921 // 1111 1101 1010 010X ---- fn.- d24; fmov (d24,SP),FDn 922 8.0xfd+4.0xa,3.2,1.X+4.0,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4m:::fmov 923 "fmov" 924 *am33_2 925 { 926 PC = cia; 927 928 if (FPU_DISABLED) 929 fpu_disabled_exception (SD, CPU, cia); 930 else 931 { 932 int reg = REG_SP; 933 Xf2FD (X, fn) = load_dword (State.regs[reg] 934 + FETCH24 (IMM24A, 935 IMM24B, IMM24C)); 936 } 937 } 938 939 // 1111 1101 1011 00Y0 fm.- Rn.. d24; fmov FDm,(d24,Rn) 940 8.0xfd+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4n:::fmov 941 "fmov" 942 *am33_2 943 { 944 PC = cia; 945 946 if (FPU_DISABLED) 947 fpu_disabled_exception (SD, CPU, cia); 948 else 949 { 950 int reg = translate_rreg (SD_, Rn); 951 store_dword (State.regs[reg] 952 + EXTEND24 (FETCH24 (IMM24A, 953 IMM24B, IMM24C)), Xf2FD (Y, fm)); 954 } 955 } 956 957 // 1111 1101 1011 00Y1 fm.- Rn.. d24; fmov FDm,(Rn+,d24) 958 8.0xfd+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4o:::fmov 959 "fmov" 960 *am33_2 961 { 962 PC = cia; 963 964 if (FPU_DISABLED) 965 fpu_disabled_exception (SD, CPU, cia); 966 else 967 { 968 int reg = translate_rreg (SD_, Rn); 969 store_dword (State.regs[reg] 970 + EXTEND24 (FETCH24 (IMM24A, 971 IMM24B, IMM24C)), Xf2FD (Y, fm)); 972 State.regs[reg] += 8; 973 } 974 } 975 976 // 1111 1101 1011 01Y0 fm.- ---- d24; fmov FDm,(d24,SP) 977 8.0xfd+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4p:::fmov 978 "fmov" 979 *am33_2 980 { 981 PC = cia; 982 983 if (FPU_DISABLED) 984 fpu_disabled_exception (SD, CPU, cia); 985 else 986 { 987 int reg = REG_SP; 988 store_dword (State.regs[reg] + FETCH24 (IMM24A, 989 IMM24B, IMM24C), Xf2FD (Y, fm)); 990 } 991 } 992 993 // 1111 1110 1010 000X Rm.. fn.- d32; fmov (d32,Rm),FDn 994 8.0xfe+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5k:::fmov 995 "fmov" 996 *am33_2 997 { 998 PC = cia; 999 1000 if (FPU_DISABLED) 1001 fpu_disabled_exception (SD, CPU, cia); 1002 else 1003 { 1004 int reg = translate_rreg (SD_, Rm); 1005 Xf2FD (X, fn) = load_dword (State.regs[reg] 1006 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1007 IMM32C, IMM32D))); 1008 } 1009 } 1010 1011 // 1111 1110 1010 001X Rm.. fn.- d32; fmov (Rm+,imm32),FDn 1012 8.0xfe+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5l:::fmov 1013 "fmov" 1014 *am33_2 1015 { 1016 PC = cia; 1017 1018 if (FPU_DISABLED) 1019 fpu_disabled_exception (SD, CPU, cia); 1020 else 1021 { 1022 int reg = translate_rreg (SD_, Rm); 1023 Xf2FD (X, fn) = load_dword (State.regs[reg] 1024 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1025 IMM32C, IMM32D))); 1026 State.regs[reg] += 8; 1027 } 1028 } 1029 1030 // 1111 1110 1010 010X ---- fn.- d32; fmov (d32,SP),FDn 1031 8.0xfe+4.0xa,3.2,1.X+4.0,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5m:::fmov 1032 "fmov" 1033 *am33_2 1034 { 1035 PC = cia; 1036 1037 if (FPU_DISABLED) 1038 fpu_disabled_exception (SD, CPU, cia); 1039 else 1040 { 1041 int reg = REG_SP; 1042 Xf2FD (X, fn) = load_dword (State.regs[reg] 1043 + FETCH32 (IMM32A, IMM32B, 1044 IMM32C, IMM32D)); 1045 } 1046 } 1047 1048 // 1111 1110 1011 00Y0 fm.- Rn.. d32; fmov FDm,(d32,Rn) 1049 8.0xfe+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5n:::fmov 1050 "fmov" 1051 *am33_2 1052 { 1053 PC = cia; 1054 1055 if (FPU_DISABLED) 1056 fpu_disabled_exception (SD, CPU, cia); 1057 else 1058 { 1059 int reg = translate_rreg (SD_, Rn); 1060 store_dword (State.regs[reg] 1061 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1062 IMM32C, IMM32D)), Xf2FD (Y, fm)); 1063 } 1064 } 1065 1066 // 1111 1110 1011 00Y1 fm.- Rn.. d32; fmov FDm,(Rn+,d32) 1067 8.0xfe+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5o:::fmov 1068 "fmov" 1069 *am33_2 1070 { 1071 PC = cia; 1072 1073 if (FPU_DISABLED) 1074 fpu_disabled_exception (SD, CPU, cia); 1075 else 1076 { 1077 int reg = translate_rreg (SD_, Rn); 1078 store_dword (State.regs[reg] 1079 + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1080 IMM32C, IMM32D)), Xf2FD (Y, fm)); 1081 State.regs[reg] += 8; 1082 } 1083 } 1084 1085 // 1111 1110 1011 01Y0 fm.- ---- d32; fmov FDm,(d32,SP) 1086 8.0xfe+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5p:::fmov 1087 "fmov" 1088 *am33_2 1089 { 1090 PC = cia; 1091 1092 if (FPU_DISABLED) 1093 fpu_disabled_exception (SD, CPU, cia); 1094 else 1095 { 1096 int reg = REG_SP; 1097 store_dword (State.regs[reg] 1098 + FETCH32 (IMM32A, IMM32B, 1099 IMM32C, IMM32D), Xf2FD (Y, fm)); 1100 } 1101 } 1102 1103 // FPCR fmov: 1104 1105 // 1111 1001 1011 0101 Rm.. ----; fmov Rm,FPCR 1106 8.0xf9+8.0xb5+4.Rm,4.0:D1q:::fmov 1107 "fmov" 1108 *am33_2 1109 { 1110 PC = cia; 1111 1112 if (FPU_DISABLED) 1113 fpu_disabled_exception (SD, CPU, cia); 1114 else 1115 { 1116 int reg = translate_rreg (SD_, Rm); 1117 uint32_t val = State.regs[reg]; 1118 FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK)) 1119 | ((FPCR & ~val) & EF_MASK); 1120 } 1121 } 1122 1123 // 1111 1001 1011 0111 ---- Rn..; fmov FPCR,Rn 1124 8.0xf9+8.0xb7+4.0,4.Rn:D1r:::fmov 1125 "fmov" 1126 *am33_2 1127 { 1128 PC = cia; 1129 1130 if (FPU_DISABLED) 1131 fpu_disabled_exception (SD, CPU, cia); 1132 else 1133 { 1134 int reg = translate_rreg (SD_, Rn); 1135 State.regs[reg] = FPCR & FPCR_MASK; 1136 } 1137 } 1138 1139 // 1111 1101 1011 0101 imm32; fmov imm32,FPCR 1140 8.0xfd+8.0xb5+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmov 1141 "fmov" 1142 *am33_2 1143 { 1144 PC = cia; 1145 1146 if (FPU_DISABLED) 1147 fpu_disabled_exception (SD, CPU, cia); 1148 else 1149 { 1150 uint32_t val = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1151 FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK)) 1152 | ((FPCR & ~val) & EF_MASK); 1153 } 1154 } 1155 1156 // fabs: 1157 1158 // 1111 1001 0100 010X ---- Sn..; fabs FSn 1159 8.0xf9+4.4,3.2,1.X+4.0,4.Sn:D1a:::fabs 1160 "fabs" 1161 *am33_2 1162 { 1163 PC = cia; 1164 1165 if (FPU_DISABLED) 1166 fpu_disabled_exception (SD, CPU, cia); 1167 else 1168 { 1169 sim_fpu in, out; 1170 1171 FS2FPU (XS2FS (X,Sn), in); 1172 sim_fpu_abs (&out, &in); 1173 FPU2FS (out, XS2FS (X,Sn)); 1174 } 1175 } 1176 1177 // 1111 1001 1100 010X ---- Sn..; fabs FDn 1178 8.0xf9+4.0xc,3.2,1.X+4.0,3.fn,1.0:D1b:::fabs 1179 "fabs" 1180 *am33_2 1181 { 1182 PC = cia; 1183 1184 if (FPU_DISABLED) 1185 fpu_disabled_exception (SD, CPU, cia); 1186 else 1187 fpu_unimp_exception (SD, CPU, cia); 1188 } 1189 1190 // 1111 1011 0100 0100 Sm.. ---- Sn.. X-Z-; fabs FSm,FSn 1191 8.0xfb+8.0x44+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fabs 1192 "fabs" 1193 *am33_2 1194 { 1195 PC = cia; 1196 1197 if (FPU_DISABLED) 1198 fpu_disabled_exception (SD, CPU, cia); 1199 else 1200 { 1201 sim_fpu in, out; 1202 1203 FS2FPU (XS2FS (X,Sm), in); 1204 sim_fpu_abs (&out, &in); 1205 FPU2FS (out, XS2FS (Z,Sn)); 1206 } 1207 } 1208 1209 // 1111 1011 1100 0100 fm.- ---- fn.- X-Z-; fabs FDm,FDn 1210 8.0xfb+8.0xc4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fabs 1211 "fabs" 1212 *am33_2 1213 { 1214 PC = cia; 1215 1216 if (FPU_DISABLED) 1217 fpu_disabled_exception (SD, CPU, cia); 1218 else 1219 fpu_unimp_exception (SD, CPU, cia); 1220 } 1221 1222 // 1111 1001 0100 011X ---- Sn..; fneg FSn 1223 8.0xf9+4.4,3.3,1.X+4.0,4.Sn:D1a:::fneg 1224 "fneg" 1225 *am33_2 1226 { 1227 PC = cia; 1228 1229 if (FPU_DISABLED) 1230 fpu_disabled_exception (SD, CPU, cia); 1231 else 1232 { 1233 sim_fpu in, out; 1234 1235 FS2FPU (XS2FS (X,Sn), in); 1236 sim_fpu_neg (&out, &in); 1237 FPU2FS (out, XS2FS (X,Sn)); 1238 } 1239 } 1240 1241 // 1111 1001 1100 011X ---- Sn..; fneg FDn 1242 8.0xf9+4.0xc,3.3,1.X+4.0,3.fn,1.0:D1b:::fneg 1243 "fneg" 1244 *am33_2 1245 { 1246 PC = cia; 1247 1248 if (FPU_DISABLED) 1249 fpu_disabled_exception (SD, CPU, cia); 1250 else 1251 fpu_unimp_exception (SD, CPU, cia); 1252 } 1253 1254 // 1111 1011 0100 0110 Sm.. ---- Sn.. X-Z-; fneg FSm,FSn 1255 8.0xfb+8.0x46+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fneg 1256 "fneg" 1257 *am33_2 1258 { 1259 PC = cia; 1260 1261 if (FPU_DISABLED) 1262 fpu_disabled_exception (SD, CPU, cia); 1263 else 1264 { 1265 sim_fpu in, out; 1266 1267 FS2FPU (XS2FS (X,Sm), in); 1268 sim_fpu_neg (&out, &in); 1269 FPU2FS (out, XS2FS (Z,Sn)); 1270 } 1271 } 1272 1273 // 1111 1011 1100 0110 fm.- ---- fn.- X-Z-; fneg FDm,FDn 1274 8.0xfb+8.0xc6+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fneg 1275 "fneg" 1276 *am33_2 1277 { 1278 PC = cia; 1279 1280 if (FPU_DISABLED) 1281 fpu_disabled_exception (SD, CPU, cia); 1282 else 1283 fpu_unimp_exception (SD, CPU, cia); 1284 } 1285 1286 // 1111 1001 0101 000X ---- Sn..; frsqrt FSn 1287 8.0xf9+4.5,3.0,1.X+4.0,4.Sn:D1a:::frsqrt 1288 "frsqrt" 1289 *am33_2 1290 { 1291 PC = cia; 1292 1293 if (FPU_DISABLED) 1294 fpu_disabled_exception (SD, CPU, cia); 1295 else 1296 fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1297 } 1298 1299 // 1111 1001 1101 000X ---- fn.-; frsqrt FDn 1300 8.0xf9+4.0xd,3.0,1.X+4.0,3.fn,1.0:D1b:::frsqrt 1301 "frsqrt" 1302 *am33_2 1303 { 1304 PC = cia; 1305 1306 if (FPU_DISABLED) 1307 fpu_disabled_exception (SD, CPU, cia); 1308 else 1309 fpu_unimp_exception (SD, CPU, cia); 1310 } 1311 1312 // 1111 1011 0101 0000 Sm.. ---- Sn.. X-Z-; frsqrt FSm,FSn 1313 8.0xfb+8.0x50+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::frsqrt 1314 "frsqrt" 1315 *am33_2 1316 { 1317 PC = cia; 1318 1319 if (FPU_DISABLED) 1320 fpu_disabled_exception (SD, CPU, cia); 1321 else 1322 fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sm), &XS2FS (Z,Sn), FP_SINGLE); 1323 } 1324 1325 // 1111 1011 1101 0000 fm.- ---- fn.- X-Z-; frsqrt FDm,FDn 1326 8.0xfb+8.0xd0+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::frsqrt 1327 "frsqrt" 1328 *am33_2 1329 { 1330 PC = cia; 1331 1332 if (FPU_DISABLED) 1333 fpu_disabled_exception (SD, CPU, cia); 1334 else 1335 fpu_unimp_exception (SD, CPU, cia); 1336 } 1337 1338 // 1111 1001 0101 001X ---- Sn..; fsqrt FSn 1339 8.0xf9+4.5,3.1,1.X+4.0,4.Sn:D1a:::fsqrt 1340 "fsqrt" 1341 *am33_2 1342 { 1343 PC = cia; 1344 1345 if (FPU_DISABLED) 1346 fpu_disabled_exception (SD, CPU, cia); 1347 else 1348 fpu_unimp_exception (SD, CPU, cia); 1349 } 1350 1351 // 1111 1001 1101 001X ---- fn.-; fsqrt FDn 1352 8.0xf9+4.0xd,3.1,1.X+4.0,3.fn,1.0:D1b:::fsqrt 1353 "fsqrt" 1354 *am33_2 1355 { 1356 PC = cia; 1357 1358 if (FPU_DISABLED) 1359 fpu_disabled_exception (SD, CPU, cia); 1360 else 1361 fpu_unimp_exception (SD, CPU, cia); 1362 } 1363 1364 // 1111 1011 0101 0100 Sm.. ---- Sn.. X-Z-; fsqrt FSm,FSn 1365 8.0xfb+8.0x54+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fsqrt 1366 "fsqrt" 1367 *am33_2 1368 { 1369 PC = cia; 1370 1371 if (FPU_DISABLED) 1372 fpu_disabled_exception (SD, CPU, cia); 1373 else 1374 fpu_unimp_exception (SD, CPU, cia); 1375 } 1376 1377 // 1111 1011 1101 0100 fm.- ---- fn.- X-Z-; fsqrt FDm,FDn 1378 8.0xfb+8.0xd4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fsqrt 1379 "fsqrt" 1380 *am33_2 1381 { 1382 PC = cia; 1383 1384 if (FPU_DISABLED) 1385 fpu_disabled_exception (SD, CPU, cia); 1386 else 1387 fpu_unimp_exception (SD, CPU, cia); 1388 } 1389 1390 // 1111 1001 0101 01YX Sm.. Sn..; fcmp FSm, FSn 1391 8.0xf9+4.5,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fcmp 1392 "fcmp" 1393 *am33_2 1394 { 1395 PC = cia; 1396 1397 if (FPU_DISABLED) 1398 fpu_disabled_exception (SD, CPU, cia); 1399 else 1400 fpu_cmp (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (Y,Sm), FP_SINGLE); 1401 } 1402 1403 // 1111 1001 1101 01YX fm.- fn.-; fcmp FDm, FDn 1404 8.0xf9+4.0xd,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fcmp 1405 "fcmp" 1406 *am33_2 1407 { 1408 PC = cia; 1409 1410 if (FPU_DISABLED) 1411 fpu_disabled_exception (SD, CPU, cia); 1412 else 1413 fpu_unimp_exception (SD, CPU, cia); 1414 } 1415 1416 // 1111 1110 0011 01Y1 Sm.. ---- IMM32; fcmp imm32, FSm 1417 8.0xfe+4.3,2.1,1.Y,1.1+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fcmp 1418 "fcmp" 1419 *am33_2 1420 { 1421 PC = cia; 1422 1423 if (FPU_DISABLED) 1424 fpu_disabled_exception (SD, CPU, cia); 1425 else 1426 { 1427 uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1428 1429 fpu_cmp (SD, CPU, cia, &XS2FS (Y,Sm), &imm, FP_SINGLE); 1430 } 1431 } 1432 1433 // 1111 1001 0110 00YX Sm.. Sn..; fadd FSm, FSn 1434 8.0xf9+4.6,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fadd 1435 "fadd" 1436 *am33_2 1437 { 1438 PC = cia; 1439 1440 if (FPU_DISABLED) 1441 fpu_disabled_exception (SD, CPU, cia); 1442 else 1443 fpu_add (SD, CPU, cia, 1444 &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1445 } 1446 1447 // 1111 1001 1110 00YX fm.- fn.-; fadd FDm, FDn 1448 8.0xf9+4.0xe,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fadd 1449 "fadd" 1450 *am33_2 1451 { 1452 PC = cia; 1453 1454 if (FPU_DISABLED) 1455 fpu_disabled_exception (SD, CPU, cia); 1456 else 1457 fpu_unimp_exception (SD, CPU, cia); 1458 } 1459 1460 // 1111 1011 0110 0000 Sm1. Sm2. Sn.. XYZ-; fadd FSm1, FSm2, FSn 1461 8.0xfb+8.0x60+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fadd 1462 "fadd" 1463 *am33_2 1464 { 1465 PC = cia; 1466 1467 if (FPU_DISABLED) 1468 fpu_disabled_exception (SD, CPU, cia); 1469 else 1470 fpu_add (SD, CPU, cia, 1471 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE); 1472 } 1473 1474 // 1111 1011 1110 0000 fm1- fm2- fn.- XYZ-; fadd FDm1, FDm2, FDn 1475 8.0xfb+8.0xe0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fadd 1476 "fadd" 1477 *am33_2 1478 { 1479 PC = cia; 1480 1481 if (FPU_DISABLED) 1482 fpu_disabled_exception (SD, CPU, cia); 1483 else 1484 fpu_unimp_exception (SD, CPU, cia); 1485 } 1486 1487 1488 // 1111 1110 0110 00YX Sm.. Sn.. IMM32; fadd imm32, FSm, FSn 1489 8.0xfe+4.6,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fadd 1490 "fadd" 1491 *am33_2 1492 { 1493 PC = cia; 1494 1495 if (FPU_DISABLED) 1496 fpu_disabled_exception (SD, CPU, cia); 1497 else 1498 { 1499 uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1500 1501 fpu_add (SD, CPU, cia, 1502 &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1503 } 1504 } 1505 1506 // 1111 1001 0110 01YX Sm.. Sn..; fsub FSm, FSn 1507 8.0xf9+4.6,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fsub 1508 "fsub" 1509 *am33_2 1510 { 1511 PC = cia; 1512 1513 if (FPU_DISABLED) 1514 fpu_disabled_exception (SD, CPU, cia); 1515 else 1516 fpu_sub (SD, CPU, cia, 1517 &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1518 } 1519 1520 // 1111 1001 1110 01YX fm.- fn.-; fsub FDm, FDn 1521 8.0xf9+4.0xe,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fsub 1522 "fsub" 1523 *am33_2 1524 { 1525 PC = cia; 1526 1527 if (FPU_DISABLED) 1528 fpu_disabled_exception (SD, CPU, cia); 1529 else 1530 fpu_unimp_exception (SD, CPU, cia); 1531 } 1532 1533 // 1111 1011 0110 0100 Sm1. Sm2. Sn.. XYZ-; fsub FSm1, FSm2, FSn 1534 8.0xfb+8.0x64+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fsub 1535 "fsub" 1536 *am33_2 1537 { 1538 PC = cia; 1539 1540 if (FPU_DISABLED) 1541 fpu_disabled_exception (SD, CPU, cia); 1542 else 1543 fpu_sub (SD, CPU, cia, 1544 &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE); 1545 } 1546 1547 // 1111 1011 1110 0100 fm1- fm2- fn.- XYZ-; fsub FDm1, FDm2, FDn 1548 8.0xfb+8.0xe4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fsub 1549 "fsub" 1550 *am33_2 1551 { 1552 PC = cia; 1553 1554 if (FPU_DISABLED) 1555 fpu_disabled_exception (SD, CPU, cia); 1556 else 1557 fpu_unimp_exception (SD, CPU, cia); 1558 } 1559 1560 1561 // 1111 1110 0110 01YX Sm.. Sn.. IMM32; fsub imm32, FSm, FSn 1562 8.0xfe+4.6,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fsub 1563 "fsub" 1564 *am33_2 1565 { 1566 PC = cia; 1567 1568 if (FPU_DISABLED) 1569 fpu_disabled_exception (SD, CPU, cia); 1570 else 1571 { 1572 uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1573 1574 fpu_sub (SD, CPU, cia, 1575 &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1576 } 1577 } 1578 1579 // 1111 1001 0111 00YX Sm.. Sn..; fmul FSm, FSn 1580 8.0xf9+4.7,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fmul 1581 "fmul" 1582 *am33_2 1583 { 1584 PC = cia; 1585 1586 if (FPU_DISABLED) 1587 fpu_disabled_exception (SD, CPU, cia); 1588 else 1589 fpu_mul (SD, CPU, cia, 1590 &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1591 } 1592 1593 // 1111 1001 1111 00YX fm.- fn.-; fmul FDm, FDn 1594 8.0xf9+4.0xf,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fmul 1595 "fmul" 1596 *am33_2 1597 { 1598 PC = cia; 1599 1600 if (FPU_DISABLED) 1601 fpu_disabled_exception (SD, CPU, cia); 1602 else 1603 fpu_unimp_exception (SD, CPU, cia); 1604 } 1605 1606 // 1111 1011 0111 0000 Sm1. Sm2. Sn.. XYZ-; fmul FSm1, FSm2, FSn 1607 8.0xfb+8.0x70+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fmul 1608 "fmul" 1609 *am33_2 1610 { 1611 PC = cia; 1612 1613 if (FPU_DISABLED) 1614 fpu_disabled_exception (SD, CPU, cia); 1615 else 1616 fpu_mul (SD, CPU, cia, 1617 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE); 1618 } 1619 1620 // 1111 1011 1111 0000 fm1- fm2- fn.- XYZ-; fmul FDm1, FDm2, FDn 1621 8.0xfb+8.0xf0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fmul 1622 "fmul" 1623 *am33_2 1624 { 1625 PC = cia; 1626 1627 if (FPU_DISABLED) 1628 fpu_disabled_exception (SD, CPU, cia); 1629 else 1630 fpu_unimp_exception (SD, CPU, cia); 1631 } 1632 1633 1634 // 1111 1110 0111 00YX Sm.. Sn.. IMM32; fmul imm32, FSm, FSn 1635 8.0xfe+4.7,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmul 1636 "fmul" 1637 *am33_2 1638 { 1639 PC = cia; 1640 1641 if (FPU_DISABLED) 1642 fpu_disabled_exception (SD, CPU, cia); 1643 else 1644 { 1645 uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1646 1647 fpu_mul (SD, CPU, cia, 1648 &imm, &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1649 } 1650 } 1651 1652 // 1111 1001 0111 01YX Sm.. Sn..; fdiv FSm, FSn 1653 8.0xf9+4.7,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fdiv 1654 "fdiv" 1655 *am33_2 1656 { 1657 PC = cia; 1658 1659 if (FPU_DISABLED) 1660 fpu_disabled_exception (SD, CPU, cia); 1661 else 1662 fpu_div (SD, CPU, cia, 1663 &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1664 } 1665 1666 // 1111 1001 1111 01YX fm.- fn.-; fdiv FDm, FDn 1667 8.0xf9+4.0xf,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fdiv 1668 "fdiv" 1669 *am33_2 1670 { 1671 PC = cia; 1672 1673 if (FPU_DISABLED) 1674 fpu_disabled_exception (SD, CPU, cia); 1675 else 1676 fpu_unimp_exception (SD, CPU, cia); 1677 } 1678 1679 // 1111 1011 0111 0100 Sm1. Sm2. Sn.. XYZ-; fdiv FSm1, FSm2, FSn 1680 8.0xfb+8.0x74+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fdiv 1681 "fdiv" 1682 *am33_2 1683 { 1684 PC = cia; 1685 1686 if (FPU_DISABLED) 1687 fpu_disabled_exception (SD, CPU, cia); 1688 else 1689 fpu_div (SD, CPU, cia, 1690 &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE); 1691 } 1692 1693 // 1111 1011 1111 0100 fm1- fm2- fn.- XYZ-; fdiv FDm1, FDm2, FDn 1694 8.0xfb+8.0xf4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fdiv 1695 "fdiv" 1696 *am33_2 1697 { 1698 PC = cia; 1699 1700 if (FPU_DISABLED) 1701 fpu_disabled_exception (SD, CPU, cia); 1702 else 1703 fpu_unimp_exception (SD, CPU, cia); 1704 } 1705 1706 1707 // 1111 1110 0111 01YX Sm.. Sn.. IMM32; fdiv imm32, FSm, FSn 1708 8.0xfe+4.7,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fdiv 1709 "fdiv" 1710 *am33_2 1711 { 1712 PC = cia; 1713 1714 if (FPU_DISABLED) 1715 fpu_disabled_exception (SD, CPU, cia); 1716 else 1717 { 1718 uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1719 1720 fpu_div (SD, CPU, cia, 1721 &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1722 } 1723 } 1724 1725 // 1111 1011 1000 00Sn Sm1. Sm2. Sm3. XYZA; fmadd FSm1, FSm2, FSm3, FSn 1726 8.0xfb+4.8,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmadd 1727 "fmadd" 1728 *am33_2 1729 { 1730 PC = cia; 1731 1732 if (FPU_DISABLED) 1733 fpu_disabled_exception (SD, CPU, cia); 1734 else 1735 fpu_fmadd (SD, CPU, cia, 1736 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1737 &AS2FS (A,Sn), FP_SINGLE); 1738 } 1739 1740 // 1111 1011 1000 01Sn Sm1. Sm2. Sm3. XYZA; fmsub FSm1, FSm2, FSm3, FSn 1741 8.0xfb+4.8,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmsub 1742 "fmsub" 1743 *am33_2 1744 { 1745 PC = cia; 1746 1747 if (FPU_DISABLED) 1748 fpu_disabled_exception (SD, CPU, cia); 1749 else 1750 fpu_fmsub (SD, CPU, cia, 1751 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1752 &AS2FS (A,Sn), FP_SINGLE); 1753 } 1754 1755 // 1111 1011 1001 00Sn Sm1. Sm2. Sm3. XYZA; fnmadd FSm1, FSm2, FSm3, FSn 1756 8.0xfb+4.9,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmadd 1757 "fnmadd" 1758 *am33_2 1759 { 1760 PC = cia; 1761 1762 if (FPU_DISABLED) 1763 fpu_disabled_exception (SD, CPU, cia); 1764 else 1765 fpu_fnmadd (SD, CPU, cia, 1766 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1767 &AS2FS (A,Sn), FP_SINGLE); 1768 } 1769 1770 // 1111 1011 1001 01Sn Sm1. Sm2. Sm3. XYZA; fnmsub FSm1, FSm2, FSm3, FSn 1771 8.0xfb+4.9,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmsub 1772 "fnmsub" 1773 *am33_2 1774 { 1775 PC = cia; 1776 1777 if (FPU_DISABLED) 1778 fpu_disabled_exception (SD, CPU, cia); 1779 else 1780 fpu_fnmsub (SD, CPU, cia, 1781 &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1782 &AS2FS (A,Sn), FP_SINGLE); 1783 } 1784 1785 // conversion: 1786 1787 // 1111 1011 0100 0000 Sm.. ---- Sn.. X-Z-; ftoi FSm,FSn 1788 8.0xfb+8.0x40+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::ftoi 1789 "ftoi" 1790 *am33_2 1791 { 1792 PC = cia; 1793 1794 if (FPU_DISABLED) 1795 fpu_disabled_exception (SD, CPU, cia); 1796 else 1797 fpu_unimp_exception (SD, CPU, cia); 1798 } 1799 1800 // 1111 1011 0100 0010 Sm.. ---- Sn.. X-Z-; itof FSm,FSn 1801 8.0xfb+8.0x42+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::itof 1802 "itof" 1803 *am33_2 1804 { 1805 PC = cia; 1806 1807 if (FPU_DISABLED) 1808 fpu_disabled_exception (SD, CPU, cia); 1809 else 1810 fpu_unimp_exception (SD, CPU, cia); 1811 } 1812 1813 // 1111 1011 0101 0010 Sm.. ---- fn.- X-Z-; ftod FSm,FDn 1814 8.0xfb+8.0x52+4.Sm,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2:::ftod 1815 "ftod" 1816 *am33_2 1817 { 1818 PC = cia; 1819 1820 if (FPU_DISABLED) 1821 fpu_disabled_exception (SD, CPU, cia); 1822 else 1823 fpu_unimp_exception (SD, CPU, cia); 1824 } 1825 1826 // 1111 1011 0101 0110 fm.- ---- Sn.. X-Z-; dtof FDm,FSn 1827 8.0xfb+8.0x56+3.fm,1.0,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::dtof 1828 "dtof" 1829 *am33_2 1830 { 1831 PC = cia; 1832 1833 if (FPU_DISABLED) 1834 fpu_disabled_exception (SD, CPU, cia); 1835 else 1836 fpu_unimp_exception (SD, CPU, cia); 1837 } 1838 1839 // branching: 1840 1841 // 1111 1000 1101 0000 d8; fbeq (d8,PC) (d8 is sign-extended) 1842 8.0xf8+8.0xd0+8.D8:D1:::fbeq 1843 "fbeq" 1844 *am33_2 1845 { 1846 PC = cia; 1847 1848 if (FPU_DISABLED) 1849 fpu_disabled_exception (SD, CPU, cia); 1850 else if ((FPCR & FCC_E)) 1851 { 1852 State.regs[REG_PC] += EXTEND8 (D8); 1853 nia = PC; 1854 } 1855 } 1856 1857 // 1111 1000 1101 0001 d8; fbne (d8,PC) (d8 is sign-extended) 1858 8.0xf8+8.0xd1+8.D8:D1:::fbne 1859 "fbne" 1860 *am33_2 1861 { 1862 PC = cia; 1863 1864 if (FPU_DISABLED) 1865 fpu_disabled_exception (SD, CPU, cia); 1866 else if ((FPCR & (FCC_U | FCC_L | FCC_G))) 1867 { 1868 State.regs[REG_PC] += EXTEND8 (D8); 1869 nia = PC; 1870 } 1871 } 1872 1873 // 1111 1000 1101 0010 d8; fbgt (d8,PC) (d8 is sign-extended) 1874 8.0xf8+8.0xd2+8.D8:D1:::fbgt 1875 "fbgt" 1876 *am33_2 1877 { 1878 PC = cia; 1879 1880 if (FPU_DISABLED) 1881 fpu_disabled_exception (SD, CPU, cia); 1882 else if ((FPCR & FCC_G)) 1883 { 1884 State.regs[REG_PC] += EXTEND8 (D8); 1885 nia = PC; 1886 } 1887 } 1888 1889 // 1111 1000 1101 0011 d8; fbge (d8,PC) (d8 is sign-extended) 1890 8.0xf8+8.0xd3+8.D8:D1:::fbge 1891 "fbge" 1892 *am33_2 1893 { 1894 PC = cia; 1895 1896 if (FPU_DISABLED) 1897 fpu_disabled_exception (SD, CPU, cia); 1898 else if ((FPCR & (FCC_G | FCC_E))) 1899 { 1900 State.regs[REG_PC] += EXTEND8 (D8); 1901 nia = PC; 1902 } 1903 } 1904 1905 // 1111 1000 1101 0100 d8; fblt (d8,PC) (d8 is sign-extended) 1906 8.0xf8+8.0xd4+8.D8:D1:::fblt 1907 "fblt" 1908 *am33_2 1909 { 1910 PC = cia; 1911 1912 if (FPU_DISABLED) 1913 fpu_disabled_exception (SD, CPU, cia); 1914 else if ((FPCR & FCC_L)) 1915 { 1916 State.regs[REG_PC] += EXTEND8 (D8); 1917 nia = PC; 1918 } 1919 } 1920 1921 // 1111 1000 1101 0101 d8; fble (d8,PC) (d8 is sign-extended) 1922 8.0xf8+8.0xd5+8.D8:D1:::fble 1923 "fble" 1924 *am33_2 1925 { 1926 PC = cia; 1927 1928 if (FPU_DISABLED) 1929 fpu_disabled_exception (SD, CPU, cia); 1930 else if ((FPCR & (FCC_L | FCC_E))) 1931 { 1932 State.regs[REG_PC] += EXTEND8 (D8); 1933 nia = PC; 1934 } 1935 } 1936 1937 // 1111 1000 1101 0110 d8; fbuo (d8,PC) (d8 is sign-extended) 1938 8.0xf8+8.0xd6+8.D8:D1:::fbuo 1939 "fbuo" 1940 *am33_2 1941 { 1942 PC = cia; 1943 1944 if (FPU_DISABLED) 1945 fpu_disabled_exception (SD, CPU, cia); 1946 else if ((FPCR & FCC_U)) 1947 { 1948 State.regs[REG_PC] += EXTEND8 (D8); 1949 nia = PC; 1950 } 1951 } 1952 1953 // 1111 1000 1101 0111 d8; fblg (d8,PC) (d8 is sign-extended) 1954 8.0xf8+8.0xd7+8.D8:D1:::fblg 1955 "fblg" 1956 *am33_2 1957 { 1958 PC = cia; 1959 1960 if (FPU_DISABLED) 1961 fpu_disabled_exception (SD, CPU, cia); 1962 else if ((FPCR & (FCC_L | FCC_G))) 1963 { 1964 State.regs[REG_PC] += EXTEND8 (D8); 1965 nia = PC; 1966 } 1967 } 1968 // 1111 1000 1101 1000 d8; fbleg (d8,PC) (d8 is sign-extended) 1969 8.0xf8+8.0xd8+8.D8:D1:::fbleg 1970 "fbleg" 1971 *am33_2 1972 { 1973 PC = cia; 1974 1975 if (FPU_DISABLED) 1976 fpu_disabled_exception (SD, CPU, cia); 1977 else if ((FPCR & (FCC_L | FCC_E | FCC_G))) 1978 { 1979 State.regs[REG_PC] += EXTEND8 (D8); 1980 nia = PC; 1981 } 1982 } 1983 1984 // 1111 1000 1101 1001 d8; fbug (d8,PC) (d8 is sign-extended) 1985 8.0xf8+8.0xd9+8.D8:D1:::fbug 1986 "fbug" 1987 *am33_2 1988 { 1989 PC = cia; 1990 1991 if (FPU_DISABLED) 1992 fpu_disabled_exception (SD, CPU, cia); 1993 else if ((FPCR & (FCC_U | FCC_G))) 1994 { 1995 State.regs[REG_PC] += EXTEND8 (D8); 1996 nia = PC; 1997 } 1998 } 1999 2000 // 1111 1000 1101 1010 d8; fbuge (d8,PC) (d8 is sign-extended) 2001 8.0xf8+8.0xda+8.D8:D1:::fbuge 2002 "fbuge" 2003 *am33_2 2004 { 2005 PC = cia; 2006 2007 if (FPU_DISABLED) 2008 fpu_disabled_exception (SD, CPU, cia); 2009 else if ((FPCR & (FCC_U | FCC_G | FCC_E))) 2010 { 2011 State.regs[REG_PC] += EXTEND8 (D8); 2012 nia = PC; 2013 } 2014 } 2015 2016 // 1111 1000 1101 1011 d8; fbul (d8,PC) (d8 is sign-extended) 2017 8.0xf8+8.0xdb+8.D8:D1:::fbul 2018 "fbul" 2019 *am33_2 2020 { 2021 PC = cia; 2022 2023 if (FPU_DISABLED) 2024 fpu_disabled_exception (SD, CPU, cia); 2025 else if ((FPCR & (FCC_U | FCC_L))) 2026 { 2027 State.regs[REG_PC] += EXTEND8 (D8); 2028 nia = PC; 2029 } 2030 } 2031 2032 // 1111 1000 1101 1100 d8; fbule (d8,PC) (d8 is sign-extended) 2033 8.0xf8+8.0xdc+8.D8:D1:::fbule 2034 "fbule" 2035 *am33_2 2036 { 2037 PC = cia; 2038 2039 if (FPU_DISABLED) 2040 fpu_disabled_exception (SD, CPU, cia); 2041 else if ((FPCR & (FCC_U | FCC_L | FCC_E))) 2042 { 2043 State.regs[REG_PC] += EXTEND8 (D8); 2044 nia = PC; 2045 } 2046 } 2047 2048 // 1111 1000 1101 1101 d8; fbue (d8,PC) (d8 is sign-extended) 2049 8.0xf8+8.0xdd+8.D8:D1:::fbue 2050 "fbue" 2051 *am33_2 2052 { 2053 PC = cia; 2054 2055 if (FPU_DISABLED) 2056 fpu_disabled_exception (SD, CPU, cia); 2057 else if ((FPCR & (FCC_U | FCC_E))) 2058 { 2059 State.regs[REG_PC] += EXTEND8 (D8); 2060 nia = PC; 2061 } 2062 } 2063 2064 // 1111 0000 1101 0000; fleq 2065 8.0xf0+8.0xd0:D0:::fleq 2066 "fleq" 2067 *am33_2 2068 { 2069 PC = cia; 2070 2071 if (FPU_DISABLED) 2072 fpu_disabled_exception (SD, CPU, cia); 2073 else if ((FPCR & FCC_E)) 2074 { 2075 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2076 nia = PC; 2077 } 2078 } 2079 2080 // 1111 0000 1101 0001; flne 2081 8.0xf0+8.0xd1:D0:::flne 2082 "flne" 2083 *am33_2 2084 { 2085 PC = cia; 2086 2087 if (FPU_DISABLED) 2088 fpu_disabled_exception (SD, CPU, cia); 2089 else if ((FPCR & (FCC_U | FCC_L | FCC_G))) 2090 { 2091 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2092 nia = PC; 2093 } 2094 } 2095 2096 // 1111 0000 1101 0010; flgt 2097 8.0xf0+8.0xd2:D0:::flgt 2098 "flgt" 2099 *am33_2 2100 { 2101 PC = cia; 2102 2103 if (FPU_DISABLED) 2104 fpu_disabled_exception (SD, CPU, cia); 2105 else if ((FPCR & FCC_G)) 2106 { 2107 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2108 nia = PC; 2109 } 2110 } 2111 2112 // 1111 0000 1101 0011; flge 2113 8.0xf0+8.0xd3:D0:::flge 2114 "flge" 2115 *am33_2 2116 { 2117 PC = cia; 2118 2119 if (FPU_DISABLED) 2120 fpu_disabled_exception (SD, CPU, cia); 2121 else if ((FPCR & (FCC_G | FCC_E))) 2122 { 2123 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2124 nia = PC; 2125 } 2126 } 2127 2128 // 1111 0000 1101 0100; fllt 2129 8.0xf0+8.0xd4:D0:::fllt 2130 "fllt" 2131 *am33_2 2132 { 2133 PC = cia; 2134 2135 if (FPU_DISABLED) 2136 fpu_disabled_exception (SD, CPU, cia); 2137 else if ((FPCR & FCC_L)) 2138 { 2139 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2140 nia = PC; 2141 } 2142 } 2143 2144 // 1111 0000 1101 0101; flle 2145 8.0xf0+8.0xd5:D0:::flle 2146 "flle" 2147 *am33_2 2148 { 2149 PC = cia; 2150 2151 if (FPU_DISABLED) 2152 fpu_disabled_exception (SD, CPU, cia); 2153 else if ((FPCR & (FCC_L | FCC_E))) 2154 { 2155 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2156 nia = PC; 2157 } 2158 } 2159 2160 // 1111 0000 1101 0110; fluo 2161 8.0xf0+8.0xd6:D0:::fluo 2162 "fluo" 2163 *am33_2 2164 { 2165 PC = cia; 2166 2167 if (FPU_DISABLED) 2168 fpu_disabled_exception (SD, CPU, cia); 2169 else if ((FPCR & FCC_U)) 2170 { 2171 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2172 nia = PC; 2173 } 2174 } 2175 2176 // 1111 0000 1101 0111; fllg 2177 8.0xf0+8.0xd7:D0:::fllg 2178 "fllg" 2179 *am33_2 2180 { 2181 PC = cia; 2182 2183 if (FPU_DISABLED) 2184 fpu_disabled_exception (SD, CPU, cia); 2185 else if ((FPCR & (FCC_L | FCC_G))) 2186 { 2187 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2188 nia = PC; 2189 } 2190 } 2191 // 1111 0000 1101 1000; flleg 2192 8.0xf0+8.0xd8:D0:::flleg 2193 "flleg" 2194 *am33_2 2195 { 2196 PC = cia; 2197 2198 if (FPU_DISABLED) 2199 fpu_disabled_exception (SD, CPU, cia); 2200 else if ((FPCR & (FCC_L | FCC_E | FCC_G))) 2201 { 2202 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2203 nia = PC; 2204 } 2205 } 2206 2207 // 1111 0000 1101 1001; flug 2208 8.0xf0+8.0xd9:D0:::flug 2209 "flug" 2210 *am33_2 2211 { 2212 PC = cia; 2213 2214 if (FPU_DISABLED) 2215 fpu_disabled_exception (SD, CPU, cia); 2216 else if ((FPCR & (FCC_U | FCC_G))) 2217 { 2218 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2219 nia = PC; 2220 } 2221 } 2222 2223 // 1111 0000 1101 1010; fluge 2224 8.0xf0+8.0xda:D0:::fluge 2225 "fluge" 2226 *am33_2 2227 { 2228 PC = cia; 2229 2230 if (FPU_DISABLED) 2231 fpu_disabled_exception (SD, CPU, cia); 2232 else if ((FPCR & (FCC_U | FCC_G | FCC_E))) 2233 { 2234 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2235 nia = PC; 2236 } 2237 } 2238 2239 // 1111 0000 1101 1011; flul 2240 8.0xf0+8.0xdb:D0:::flul 2241 "flul" 2242 *am33_2 2243 { 2244 PC = cia; 2245 2246 if (FPU_DISABLED) 2247 fpu_disabled_exception (SD, CPU, cia); 2248 else if ((FPCR & (FCC_U | FCC_L))) 2249 { 2250 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2251 nia = PC; 2252 } 2253 } 2254 2255 // 1111 0000 1101 1100; flule 2256 8.0xf0+8.0xdc:D0:::flule 2257 "flule" 2258 *am33_2 2259 { 2260 PC = cia; 2261 2262 if (FPU_DISABLED) 2263 fpu_disabled_exception (SD, CPU, cia); 2264 else if ((FPCR & (FCC_U | FCC_L | FCC_E))) 2265 { 2266 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2267 nia = PC; 2268 } 2269 } 2270 2271 // 1111 0000 1101 1101; flue 2272 8.0xf0+8.0xdd:D0:::flue 2273 "flue" 2274 *am33_2 2275 { 2276 PC = cia; 2277 2278 if (FPU_DISABLED) 2279 fpu_disabled_exception (SD, CPU, cia); 2280 else if ((FPCR & (FCC_U | FCC_E))) 2281 { 2282 State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2283 nia = PC; 2284 } 2285 } 2286