Commit 7efbe24165d3b97e312aa7abd3386044ef7984e7
1 parent
69d6275b
SH4: TCG optimisations
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5121 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
236 additions
and
349 deletions
target-sh4/translate.c
... | ... | @@ -366,10 +366,10 @@ static inline void gen_copy_bit_i32(TCGv t0, int p0, TCGv t1, int p1) |
366 | 366 | #define B15_12 ((ctx->opcode >> 12) & 0xf) |
367 | 367 | |
368 | 368 | #define REG(x) ((x) < 8 && (ctx->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB) ? \ |
369 | - (x) + 16 : (x)) | |
369 | + (cpu_gregs[x + 16]) : (cpu_gregs[x])) | |
370 | 370 | |
371 | 371 | #define ALTREG(x) ((x) < 8 && (ctx->sr & (SR_MD | SR_RB)) != (SR_MD | SR_RB) \ |
372 | - ? (x) + 16 : (x)) | |
372 | + ? (cpu_gregs[x + 16]) : (cpu_gregs[x])) | |
373 | 373 | |
374 | 374 | #define FREG(x) (ctx->fpscr & FPSCR_FR ? (x) ^ 0x10 : (x)) |
375 | 375 | #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) |
... | ... | @@ -448,32 +448,26 @@ void _decode_opc(DisasContext * ctx) |
448 | 448 | |
449 | 449 | switch (ctx->opcode & 0xf000) { |
450 | 450 | case 0x1000: /* mov.l Rm,@(disp,Rn) */ |
451 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
452 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
453 | - tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 4); | |
454 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
451 | + tcg_gen_addi_i32(cpu_T[0], REG(B11_8), B3_0 * 4); | |
452 | + tcg_gen_qemu_st32(REG(B7_4), cpu_T[0], ctx->memidx); | |
455 | 453 | return; |
456 | 454 | case 0x5000: /* mov.l @(disp,Rm),Rn */ |
457 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
458 | - tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 4); | |
459 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
460 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
455 | + tcg_gen_addi_i32(cpu_T[0], REG(B7_4), B3_0 * 4); | |
456 | + tcg_gen_qemu_ld32s(REG(B11_8), cpu_T[0], ctx->memidx); | |
461 | 457 | return; |
462 | 458 | case 0xe000: /* mov #imm,Rn */ |
463 | - tcg_gen_movi_i32(cpu_gregs[REG(B11_8)], B7_0s); | |
459 | + tcg_gen_movi_i32(REG(B11_8), B7_0s); | |
464 | 460 | return; |
465 | 461 | case 0x9000: /* mov.w @(disp,PC),Rn */ |
466 | 462 | tcg_gen_movi_i32(cpu_T[0], ctx->pc + 4 + B7_0 * 2); |
467 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
468 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
463 | + tcg_gen_qemu_ld16s(REG(B11_8), cpu_T[0], ctx->memidx); | |
469 | 464 | return; |
470 | 465 | case 0xd000: /* mov.l @(disp,PC),Rn */ |
471 | 466 | tcg_gen_movi_i32(cpu_T[0], (ctx->pc + 4 + B7_0 * 4) & ~3); |
472 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
473 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
467 | + tcg_gen_qemu_ld32s(REG(B11_8), cpu_T[0], ctx->memidx); | |
474 | 468 | return; |
475 | 469 | case 0x7000: /* add #imm,Rn */ |
476 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], B7_0s); | |
470 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), B7_0s); | |
477 | 471 | return; |
478 | 472 | case 0xa000: /* bra disp */ |
479 | 473 | CHECK_NOT_DELAY_SLOT |
... | ... | @@ -492,179 +486,133 @@ void _decode_opc(DisasContext * ctx) |
492 | 486 | |
493 | 487 | switch (ctx->opcode & 0xf00f) { |
494 | 488 | case 0x6003: /* mov Rm,Rn */ |
495 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
496 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
489 | + tcg_gen_mov_i32(REG(B11_8), REG(B7_4)); | |
497 | 490 | return; |
498 | 491 | case 0x2000: /* mov.b Rm,@Rn */ |
499 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
500 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
501 | - tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
492 | + tcg_gen_qemu_st8(REG(B7_4), REG(B11_8), ctx->memidx); | |
502 | 493 | return; |
503 | 494 | case 0x2001: /* mov.w Rm,@Rn */ |
504 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
505 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
506 | - tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
495 | + tcg_gen_qemu_st16(REG(B7_4), REG(B11_8), ctx->memidx); | |
507 | 496 | return; |
508 | 497 | case 0x2002: /* mov.l Rm,@Rn */ |
509 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
510 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
511 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
498 | + tcg_gen_qemu_st32(REG(B7_4), REG(B11_8), ctx->memidx); | |
512 | 499 | return; |
513 | 500 | case 0x6000: /* mov.b @Rm,Rn */ |
514 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
515 | - tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
516 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
501 | + tcg_gen_qemu_ld8s(REG(B11_8), REG(B7_4), ctx->memidx); | |
517 | 502 | return; |
518 | 503 | case 0x6001: /* mov.w @Rm,Rn */ |
519 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
520 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
521 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
504 | + tcg_gen_qemu_ld16s(REG(B11_8), REG(B7_4), ctx->memidx); | |
522 | 505 | return; |
523 | 506 | case 0x6002: /* mov.l @Rm,Rn */ |
524 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
525 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
526 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
507 | + tcg_gen_qemu_ld32s(REG(B11_8), REG(B7_4), ctx->memidx); | |
527 | 508 | return; |
528 | 509 | case 0x2004: /* mov.b Rm,@-Rn */ |
529 | - tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 1); | |
530 | - tcg_gen_qemu_st8(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); /* might cause re-execution */ | |
531 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
532 | - cpu_gregs[REG(B11_8)], 1); /* modify register status */ | |
510 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 1); | |
511 | + tcg_gen_qemu_st8(REG(B7_4), cpu_T[0], ctx->memidx); /* might cause re-execution */ | |
512 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 1); /* modify register status */ | |
533 | 513 | return; |
534 | 514 | case 0x2005: /* mov.w Rm,@-Rn */ |
535 | - tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 2); | |
536 | - tcg_gen_qemu_st16(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); | |
537 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
538 | - cpu_gregs[REG(B11_8)], 2); | |
515 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 2); | |
516 | + tcg_gen_qemu_st16(REG(B7_4), cpu_T[0], ctx->memidx); | |
517 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 2); | |
539 | 518 | return; |
540 | 519 | case 0x2006: /* mov.l Rm,@-Rn */ |
541 | - tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 4); | |
542 | - tcg_gen_qemu_st32(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); | |
543 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
544 | - cpu_gregs[REG(B11_8)], 4); | |
520 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 4); | |
521 | + tcg_gen_qemu_st32(REG(B7_4), cpu_T[0], ctx->memidx); | |
522 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
545 | 523 | return; |
546 | 524 | case 0x6004: /* mov.b @Rm+,Rn */ |
547 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
548 | - tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
549 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
525 | + tcg_gen_qemu_ld8s(REG(B11_8), REG(B7_4), ctx->memidx); | |
550 | 526 | if ( B11_8 != B7_4 ) |
551 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], | |
552 | - cpu_gregs[REG(B7_4)], 1); | |
527 | + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 1); | |
553 | 528 | return; |
554 | 529 | case 0x6005: /* mov.w @Rm+,Rn */ |
555 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
556 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
557 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
530 | + tcg_gen_qemu_ld16s(REG(B11_8), REG(B7_4), ctx->memidx); | |
558 | 531 | if ( B11_8 != B7_4 ) |
559 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], | |
560 | - cpu_gregs[REG(B7_4)], 2); | |
532 | + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 2); | |
561 | 533 | return; |
562 | 534 | case 0x6006: /* mov.l @Rm+,Rn */ |
563 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
564 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
565 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
535 | + tcg_gen_qemu_ld32s(REG(B11_8), REG(B7_4), ctx->memidx); | |
566 | 536 | if ( B11_8 != B7_4 ) |
567 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], | |
568 | - cpu_gregs[REG(B7_4)], 4); | |
537 | + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); | |
569 | 538 | return; |
570 | 539 | case 0x0004: /* mov.b Rm,@(R0,Rn) */ |
571 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
572 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
573 | - tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); | |
574 | - tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
540 | + tcg_gen_add_i32(cpu_T[0], REG(B11_8), REG(0)); | |
541 | + tcg_gen_qemu_st8(REG(B7_4), cpu_T[0], ctx->memidx); | |
575 | 542 | return; |
576 | 543 | case 0x0005: /* mov.w Rm,@(R0,Rn) */ |
577 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
578 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
579 | - tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); | |
580 | - tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
544 | + tcg_gen_add_i32(cpu_T[0], REG(B11_8), REG(0)); | |
545 | + tcg_gen_qemu_st16(REG(B7_4), cpu_T[0], ctx->memidx); | |
581 | 546 | return; |
582 | 547 | case 0x0006: /* mov.l Rm,@(R0,Rn) */ |
583 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
584 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
585 | - tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); | |
586 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
548 | + tcg_gen_add_i32(cpu_T[0], REG(B11_8), REG(0)); | |
549 | + tcg_gen_qemu_st32(REG(B7_4), cpu_T[0], ctx->memidx); | |
587 | 550 | return; |
588 | 551 | case 0x000c: /* mov.b @(R0,Rm),Rn */ |
589 | - tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); | |
590 | - tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
591 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
552 | + tcg_gen_add_i32(cpu_T[0], REG(B7_4), REG(0)); | |
553 | + tcg_gen_qemu_ld8s(REG(B11_8), cpu_T[0], ctx->memidx); | |
592 | 554 | return; |
593 | 555 | case 0x000d: /* mov.w @(R0,Rm),Rn */ |
594 | - tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); | |
595 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
596 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
556 | + tcg_gen_add_i32(cpu_T[0], REG(B7_4), REG(0)); | |
557 | + tcg_gen_qemu_ld16s(REG(B11_8), cpu_T[0], ctx->memidx); | |
597 | 558 | return; |
598 | 559 | case 0x000e: /* mov.l @(R0,Rm),Rn */ |
599 | - tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); | |
600 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
601 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
560 | + tcg_gen_add_i32(cpu_T[0], REG(B7_4), REG(0)); | |
561 | + tcg_gen_qemu_ld32s(REG(B11_8), cpu_T[0], ctx->memidx); | |
602 | 562 | return; |
603 | 563 | case 0x6008: /* swap.b Rm,Rn */ |
604 | - tcg_gen_andi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], 0xffff0000); | |
605 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xff); | |
564 | + tcg_gen_ext8u_i32(cpu_T[0], REG(B7_4)); | |
606 | 565 | tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 8); |
607 | - tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
608 | - tcg_gen_shri_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 8); | |
609 | - tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xff); | |
610 | - tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
566 | + tcg_gen_shri_i32(cpu_T[1], REG(B7_4), 8); | |
567 | + tcg_gen_ext8u_i32(cpu_T[1], cpu_T[1]); | |
568 | + tcg_gen_or_i32(REG(B11_8), cpu_T[0], cpu_T[1]); | |
611 | 569 | return; |
612 | 570 | case 0x6009: /* swap.w Rm,Rn */ |
613 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xffff); | |
571 | + tcg_gen_ext16u_i32(cpu_T[0], REG(B7_4)); | |
614 | 572 | tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 16); |
615 | - tcg_gen_shri_i32(cpu_T[1], cpu_gregs[REG(B7_4)], 16); | |
616 | - tcg_gen_andi_i32(cpu_T[1], cpu_T[1], 0xffff); | |
617 | - tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_T[0], cpu_T[1]); | |
573 | + tcg_gen_shri_i32(cpu_T[1], REG(B7_4), 16); | |
574 | + tcg_gen_ext16u_i32(cpu_T[1], cpu_T[1]); | |
575 | + tcg_gen_or_i32(REG(B11_8), cpu_T[0], cpu_T[1]); | |
618 | 576 | return; |
619 | 577 | case 0x200d: /* xtrct Rm,Rn */ |
620 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xffff); | |
578 | + tcg_gen_ext16u_i32(cpu_T[0], REG(B7_4)); | |
621 | 579 | tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 16); |
622 | - tcg_gen_shri_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 16); | |
623 | - tcg_gen_andi_i32(cpu_T[1], cpu_T[1], 0xffff); | |
624 | - tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_T[0], cpu_T[1]); | |
580 | + tcg_gen_shri_i32(cpu_T[1], REG(B11_8), 16); | |
581 | + tcg_gen_ext16u_i32(cpu_T[1], cpu_T[1]); | |
582 | + tcg_gen_or_i32(REG(B11_8), cpu_T[0], cpu_T[1]); | |
625 | 583 | return; |
626 | 584 | case 0x300c: /* add Rm,Rn */ |
627 | - tcg_gen_add_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
585 | + tcg_gen_add_i32(REG(B11_8), REG(B11_8), REG(B7_4)); | |
628 | 586 | return; |
629 | 587 | case 0x300e: /* addc Rm,Rn */ |
630 | - tcg_gen_helper_1_2(helper_addc, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
588 | + tcg_gen_helper_1_2(helper_addc, REG(B11_8), REG(B7_4), REG(B11_8)); | |
631 | 589 | return; |
632 | 590 | case 0x300f: /* addv Rm,Rn */ |
633 | - tcg_gen_helper_1_2(helper_addv, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
591 | + tcg_gen_helper_1_2(helper_addv, REG(B11_8), REG(B7_4), REG(B11_8)); | |
634 | 592 | return; |
635 | 593 | case 0x2009: /* and Rm,Rn */ |
636 | - tcg_gen_and_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
594 | + tcg_gen_and_i32(REG(B11_8), REG(B11_8), REG(B7_4)); | |
637 | 595 | return; |
638 | 596 | case 0x3000: /* cmp/eq Rm,Rn */ |
639 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
640 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
641 | - gen_cmp(TCG_COND_EQ, cpu_T[0], cpu_T[1]); | |
597 | + gen_cmp(TCG_COND_EQ, REG(B7_4), REG(B11_8)); | |
642 | 598 | return; |
643 | 599 | case 0x3003: /* cmp/ge Rm,Rn */ |
644 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
645 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
646 | - gen_cmp(TCG_COND_GE, cpu_T[0], cpu_T[1]); | |
600 | + gen_cmp(TCG_COND_GE, REG(B7_4), REG(B11_8)); | |
647 | 601 | return; |
648 | 602 | case 0x3007: /* cmp/gt Rm,Rn */ |
649 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
650 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
651 | - gen_cmp(TCG_COND_GT, cpu_T[0], cpu_T[1]); | |
603 | + gen_cmp(TCG_COND_GT, REG(B7_4), REG(B11_8)); | |
652 | 604 | return; |
653 | 605 | case 0x3006: /* cmp/hi Rm,Rn */ |
654 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
655 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
656 | - gen_cmp(TCG_COND_GTU, cpu_T[0], cpu_T[1]); | |
606 | + gen_cmp(TCG_COND_GTU, REG(B7_4), REG(B11_8)); | |
657 | 607 | return; |
658 | 608 | case 0x3002: /* cmp/hs Rm,Rn */ |
659 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
660 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
661 | - gen_cmp(TCG_COND_GEU, cpu_T[0], cpu_T[1]); | |
609 | + gen_cmp(TCG_COND_GEU, REG(B7_4), REG(B11_8)); | |
662 | 610 | return; |
663 | 611 | case 0x200c: /* cmp/str Rm,Rn */ |
664 | 612 | { |
665 | 613 | int label1 = gen_new_label(); |
666 | 614 | int label2 = gen_new_label(); |
667 | - tcg_gen_xor_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
615 | + tcg_gen_xor_i32(cpu_T[0], REG(B7_4), REG(B11_8)); | |
668 | 616 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xff000000); |
669 | 617 | tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_T[0], 0, label1); |
670 | 618 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0x00ff0000); |
... | ... | @@ -681,21 +629,21 @@ void _decode_opc(DisasContext * ctx) |
681 | 629 | } |
682 | 630 | return; |
683 | 631 | case 0x2007: /* div0s Rm,Rn */ |
684 | - gen_copy_bit_i32(cpu_sr, 8, cpu_gregs[REG(B11_8)], 31); /* SR_Q */ | |
685 | - gen_copy_bit_i32(cpu_sr, 9, cpu_gregs[REG(B7_4)], 31); /* SR_M */ | |
686 | - tcg_gen_xor_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
687 | - gen_copy_bit_i32(cpu_sr, 0, cpu_T[0], 31); /* SR_T */ | |
632 | + gen_copy_bit_i32(cpu_sr, 8, REG(B11_8), 31); /* SR_Q */ | |
633 | + gen_copy_bit_i32(cpu_sr, 9, REG(B7_4), 31); /* SR_M */ | |
634 | + tcg_gen_xor_i32(cpu_T[0], REG(B7_4), REG(B11_8)); | |
635 | + gen_copy_bit_i32(cpu_sr, 0, cpu_T[0], 31); /* SR_T */ | |
688 | 636 | return; |
689 | 637 | case 0x3004: /* div1 Rm,Rn */ |
690 | - tcg_gen_helper_1_2(helper_div1, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
638 | + tcg_gen_helper_1_2(helper_div1, REG(B11_8), REG(B7_4), REG(B11_8)); | |
691 | 639 | return; |
692 | 640 | case 0x300d: /* dmuls.l Rm,Rn */ |
693 | 641 | { |
694 | 642 | TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64); |
695 | 643 | TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); |
696 | 644 | |
697 | - tcg_gen_ext_i32_i64(tmp1, cpu_gregs[REG(B7_4)]); | |
698 | - tcg_gen_ext_i32_i64(tmp2, cpu_gregs[REG(B11_8)]); | |
645 | + tcg_gen_ext_i32_i64(tmp1, REG(B7_4)); | |
646 | + tcg_gen_ext_i32_i64(tmp2, REG(B11_8)); | |
699 | 647 | tcg_gen_mul_i64(tmp1, tmp1, tmp2); |
700 | 648 | tcg_gen_trunc_i64_i32(cpu_macl, tmp1); |
701 | 649 | tcg_gen_shri_i64(tmp1, tmp1, 32); |
... | ... | @@ -710,8 +658,8 @@ void _decode_opc(DisasContext * ctx) |
710 | 658 | TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64); |
711 | 659 | TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); |
712 | 660 | |
713 | - tcg_gen_extu_i32_i64(tmp1, cpu_gregs[REG(B7_4)]); | |
714 | - tcg_gen_extu_i32_i64(tmp2, cpu_gregs[REG(B11_8)]); | |
661 | + tcg_gen_extu_i32_i64(tmp1, REG(B7_4)); | |
662 | + tcg_gen_extu_i32_i64(tmp2, REG(B11_8)); | |
715 | 663 | tcg_gen_mul_i64(tmp1, tmp1, tmp2); |
716 | 664 | tcg_gen_trunc_i64_i32(cpu_macl, tmp1); |
717 | 665 | tcg_gen_shri_i64(tmp1, tmp1, 32); |
... | ... | @@ -722,71 +670,55 @@ void _decode_opc(DisasContext * ctx) |
722 | 670 | } |
723 | 671 | return; |
724 | 672 | case 0x600e: /* exts.b Rm,Rn */ |
725 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
726 | - tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xff); | |
727 | - tcg_gen_ext8s_i32(cpu_T[0], cpu_T[0]); | |
728 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
673 | + tcg_gen_ext8s_i32(REG(B11_8), REG(B7_4)); | |
729 | 674 | return; |
730 | 675 | case 0x600f: /* exts.w Rm,Rn */ |
731 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
732 | - tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xffff); | |
733 | - tcg_gen_ext16s_i32(cpu_T[0], cpu_T[0]); | |
734 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
676 | + tcg_gen_ext16s_i32(REG(B11_8), REG(B7_4)); | |
735 | 677 | return; |
736 | 678 | case 0x600c: /* extu.b Rm,Rn */ |
737 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
738 | - tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xff); | |
739 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
679 | + tcg_gen_ext8u_i32(REG(B11_8), REG(B7_4)); | |
740 | 680 | return; |
741 | 681 | case 0x600d: /* extu.w Rm,Rn */ |
742 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
743 | - tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xffff); | |
744 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
682 | + tcg_gen_ext16u_i32(REG(B11_8), REG(B7_4)); | |
745 | 683 | return; |
746 | 684 | case 0x000f: /* mac.l @Rm+,@Rn+ */ |
747 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
748 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
749 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
750 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
751 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
685 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B7_4), ctx->memidx); | |
686 | + tcg_gen_qemu_ld32s(cpu_T[1], REG(B11_8), ctx->memidx); | |
752 | 687 | tcg_gen_helper_0_2(helper_macl, cpu_T[0], cpu_T[1]); |
753 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 4); | |
754 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
688 | + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); | |
689 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); | |
755 | 690 | return; |
756 | 691 | case 0x400f: /* mac.w @Rm+,@Rn+ */ |
757 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
758 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
759 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
760 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
761 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
692 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B7_4), ctx->memidx); | |
693 | + tcg_gen_qemu_ld32s(cpu_T[1], REG(B11_8), ctx->memidx); | |
762 | 694 | tcg_gen_helper_0_2(helper_macw, cpu_T[0], cpu_T[1]); |
763 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); | |
764 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 2); | |
695 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 2); | |
696 | + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 2); | |
765 | 697 | return; |
766 | 698 | case 0x0007: /* mul.l Rm,Rn */ |
767 | - tcg_gen_mul_i32(cpu_macl, cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
699 | + tcg_gen_mul_i32(cpu_macl, REG(B7_4), REG(B11_8)); | |
768 | 700 | return; |
769 | 701 | case 0x200f: /* muls.w Rm,Rn */ |
770 | - tcg_gen_ext16s_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
771 | - tcg_gen_ext16s_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
702 | + tcg_gen_ext16s_i32(cpu_T[0], REG(B7_4)); | |
703 | + tcg_gen_ext16s_i32(cpu_T[1], REG(B11_8)); | |
772 | 704 | tcg_gen_mul_i32(cpu_macl, cpu_T[0], cpu_T[1]); |
773 | 705 | return; |
774 | 706 | case 0x200e: /* mulu.w Rm,Rn */ |
775 | - tcg_gen_ext16u_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
776 | - tcg_gen_ext16u_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
707 | + tcg_gen_ext16u_i32(cpu_T[0], REG(B7_4)); | |
708 | + tcg_gen_ext16u_i32(cpu_T[1], REG(B11_8)); | |
777 | 709 | tcg_gen_mul_i32(cpu_macl, cpu_T[0], cpu_T[1]); |
778 | 710 | return; |
779 | 711 | case 0x600b: /* neg Rm,Rn */ |
780 | - tcg_gen_neg_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
712 | + tcg_gen_neg_i32(REG(B11_8), REG(B7_4)); | |
781 | 713 | return; |
782 | 714 | case 0x600a: /* negc Rm,Rn */ |
783 | - tcg_gen_helper_1_1(helper_negc, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
715 | + tcg_gen_helper_1_1(helper_negc, REG(B11_8), REG(B7_4)); | |
784 | 716 | return; |
785 | 717 | case 0x6007: /* not Rm,Rn */ |
786 | - tcg_gen_not_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
718 | + tcg_gen_not_i32(REG(B11_8), REG(B7_4)); | |
787 | 719 | return; |
788 | 720 | case 0x200b: /* or Rm,Rn */ |
789 | - tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
721 | + tcg_gen_or_i32(REG(B11_8), REG(B11_8), REG(B7_4)); | |
790 | 722 | return; |
791 | 723 | case 0x400c: /* shad Rm,Rn */ |
792 | 724 | { |
... | ... | @@ -794,27 +726,27 @@ void _decode_opc(DisasContext * ctx) |
794 | 726 | int label2 = gen_new_label(); |
795 | 727 | int label3 = gen_new_label(); |
796 | 728 | int label4 = gen_new_label(); |
797 | - tcg_gen_brcondi_i32(TCG_COND_LT, cpu_gregs[REG(B7_4)], 0, label1); | |
729 | + tcg_gen_brcondi_i32(TCG_COND_LT, REG(B7_4), 0, label1); | |
798 | 730 | /* Rm positive, shift to the left */ |
799 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0x1f); | |
800 | - tcg_gen_shl_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
731 | + tcg_gen_andi_i32(cpu_T[0], REG(B7_4), 0x1f); | |
732 | + tcg_gen_shl_i32(REG(B11_8), REG(B11_8), cpu_T[0]); | |
801 | 733 | tcg_gen_br(label4); |
802 | 734 | /* Rm negative, shift to the right */ |
803 | 735 | gen_set_label(label1); |
804 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0x1f); | |
736 | + tcg_gen_andi_i32(cpu_T[0], REG(B7_4), 0x1f); | |
805 | 737 | tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_T[0], 0, label2); |
806 | - tcg_gen_not_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
738 | + tcg_gen_not_i32(cpu_T[0], REG(B7_4)); | |
807 | 739 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0x1f); |
808 | 740 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], 1); |
809 | - tcg_gen_sar_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
741 | + tcg_gen_sar_i32(REG(B11_8), REG(B11_8), cpu_T[0]); | |
810 | 742 | tcg_gen_br(label4); |
811 | 743 | /* Rm = -32 */ |
812 | 744 | gen_set_label(label2); |
813 | - tcg_gen_brcondi_i32(TCG_COND_LT, cpu_gregs[REG(B11_8)], 0, label3); | |
814 | - tcg_gen_movi_i32(cpu_gregs[REG(B11_8)], 0); | |
745 | + tcg_gen_brcondi_i32(TCG_COND_LT, REG(B11_8), 0, label3); | |
746 | + tcg_gen_movi_i32(REG(B11_8), 0); | |
815 | 747 | tcg_gen_br(label4); |
816 | 748 | gen_set_label(label3); |
817 | - tcg_gen_movi_i32(cpu_gregs[REG(B11_8)], 0xffffffff); | |
749 | + tcg_gen_movi_i32(REG(B11_8), 0xffffffff); | |
818 | 750 | gen_set_label(label4); |
819 | 751 | } |
820 | 752 | return; |
... | ... | @@ -823,43 +755,41 @@ void _decode_opc(DisasContext * ctx) |
823 | 755 | int label1 = gen_new_label(); |
824 | 756 | int label2 = gen_new_label(); |
825 | 757 | int label3 = gen_new_label(); |
826 | - tcg_gen_brcondi_i32(TCG_COND_LT, cpu_gregs[REG(B7_4)], 0, label1); | |
758 | + tcg_gen_brcondi_i32(TCG_COND_LT, REG(B7_4), 0, label1); | |
827 | 759 | /* Rm positive, shift to the left */ |
828 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0x1f); | |
829 | - tcg_gen_shl_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
760 | + tcg_gen_andi_i32(cpu_T[0], REG(B7_4), 0x1f); | |
761 | + tcg_gen_shl_i32(REG(B11_8), REG(B11_8), cpu_T[0]); | |
830 | 762 | tcg_gen_br(label3); |
831 | 763 | /* Rm negative, shift to the right */ |
832 | 764 | gen_set_label(label1); |
833 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0x1f); | |
765 | + tcg_gen_andi_i32(cpu_T[0], REG(B7_4), 0x1f); | |
834 | 766 | tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_T[0], 0, label2); |
835 | - tcg_gen_not_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
767 | + tcg_gen_not_i32(cpu_T[0], REG(B7_4)); | |
836 | 768 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0x1f); |
837 | 769 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], 1); |
838 | - tcg_gen_shr_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | |
770 | + tcg_gen_shr_i32(REG(B11_8), REG(B11_8), cpu_T[0]); | |
839 | 771 | tcg_gen_br(label3); |
840 | 772 | /* Rm = -32 */ |
841 | 773 | gen_set_label(label2); |
842 | - tcg_gen_movi_i32(cpu_gregs[REG(B11_8)], 0); | |
774 | + tcg_gen_movi_i32(REG(B11_8), 0); | |
843 | 775 | gen_set_label(label3); |
844 | 776 | } |
845 | 777 | return; |
846 | 778 | case 0x3008: /* sub Rm,Rn */ |
847 | - tcg_gen_sub_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
779 | + tcg_gen_sub_i32(REG(B11_8), REG(B11_8), REG(B7_4)); | |
848 | 780 | return; |
849 | 781 | case 0x300a: /* subc Rm,Rn */ |
850 | - tcg_gen_helper_1_2(helper_subc, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
782 | + tcg_gen_helper_1_2(helper_subc, REG(B11_8), REG(B7_4), REG(B11_8)); | |
851 | 783 | return; |
852 | 784 | case 0x300b: /* subv Rm,Rn */ |
853 | - tcg_gen_helper_1_2(helper_subv, cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], cpu_gregs[REG(B11_8)]); | |
785 | + tcg_gen_helper_1_2(helper_subv, REG(B11_8), REG(B7_4), REG(B11_8)); | |
854 | 786 | return; |
855 | 787 | case 0x2008: /* tst Rm,Rn */ |
856 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
857 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
858 | - tcg_gen_and_i32(cpu_T[0], cpu_T[0], cpu_T[1]); | |
788 | + tcg_gen_and_i32(cpu_T[0], REG(B7_4), REG(B11_8)); | |
859 | 789 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
860 | 790 | return; |
861 | 791 | case 0x200a: /* xor Rm,Rn */ |
862 | - tcg_gen_xor_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); | |
792 | + tcg_gen_xor_i32(REG(B11_8), REG(B11_8), REG(B7_4)); | |
863 | 793 | return; |
864 | 794 | case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ |
865 | 795 | if (ctx->fpscr & FPSCR_SZ) { |
... | ... | @@ -873,59 +803,59 @@ void _decode_opc(DisasContext * ctx) |
873 | 803 | case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ |
874 | 804 | if (ctx->fpscr & FPSCR_SZ) { |
875 | 805 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
876 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
806 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
877 | 807 | gen_op_stfq_DT0_T1(ctx); |
878 | 808 | } else { |
879 | 809 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
880 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
810 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
881 | 811 | gen_op_stfl_FT0_T1(ctx); |
882 | 812 | } |
883 | 813 | return; |
884 | 814 | case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ |
885 | 815 | if (ctx->fpscr & FPSCR_SZ) { |
886 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
816 | + tcg_gen_mov_i32(cpu_T[0], REG(B7_4)); | |
887 | 817 | gen_op_ldfq_T0_DT0(ctx); |
888 | 818 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
889 | 819 | } else { |
890 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
820 | + tcg_gen_mov_i32(cpu_T[0], REG(B7_4)); | |
891 | 821 | gen_op_ldfl_T0_FT0(ctx); |
892 | 822 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
893 | 823 | } |
894 | 824 | return; |
895 | 825 | case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ |
896 | 826 | if (ctx->fpscr & FPSCR_SZ) { |
897 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
827 | + tcg_gen_mov_i32(cpu_T[0], REG(B7_4)); | |
898 | 828 | gen_op_ldfq_T0_DT0(ctx); |
899 | 829 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
900 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], | |
901 | - cpu_gregs[REG(B7_4)], 8); | |
830 | + tcg_gen_addi_i32(REG(B7_4), | |
831 | + REG(B7_4), 8); | |
902 | 832 | } else { |
903 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
833 | + tcg_gen_mov_i32(cpu_T[0], REG(B7_4)); | |
904 | 834 | gen_op_ldfl_T0_FT0(ctx); |
905 | 835 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
906 | - tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], | |
907 | - cpu_gregs[REG(B7_4)], 4); | |
836 | + tcg_gen_addi_i32(REG(B7_4), | |
837 | + REG(B7_4), 4); | |
908 | 838 | } |
909 | 839 | return; |
910 | 840 | case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ |
911 | 841 | if (ctx->fpscr & FPSCR_SZ) { |
912 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); | |
842 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 8); | |
913 | 843 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
914 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
915 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); | |
844 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
845 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 8); | |
916 | 846 | gen_op_stfq_DT0_T1(ctx); |
917 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); | |
847 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 8); | |
918 | 848 | } else { |
919 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
849 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
920 | 850 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
921 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
922 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
851 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
852 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); | |
923 | 853 | gen_op_stfl_FT0_T1(ctx); |
924 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
854 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
925 | 855 | } |
926 | 856 | return; |
927 | 857 | case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ |
928 | - tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); | |
858 | + tcg_gen_add_i32(cpu_T[0], REG(B7_4), REG(0)); | |
929 | 859 | if (ctx->fpscr & FPSCR_SZ) { |
930 | 860 | gen_op_ldfq_T0_DT0(ctx); |
931 | 861 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
... | ... | @@ -937,13 +867,13 @@ void _decode_opc(DisasContext * ctx) |
937 | 867 | case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) - FPSCR: Nothing */ |
938 | 868 | if (ctx->fpscr & FPSCR_SZ) { |
939 | 869 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
940 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
941 | - tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); | |
870 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
871 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], REG(0)); | |
942 | 872 | gen_op_stfq_DT0_T1(ctx); |
943 | 873 | } else { |
944 | 874 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
945 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
946 | - tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); | |
875 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
876 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], REG(0)); | |
947 | 877 | gen_op_stfl_FT0_T1(ctx); |
948 | 878 | } |
949 | 879 | return; |
... | ... | @@ -996,13 +926,11 @@ void _decode_opc(DisasContext * ctx) |
996 | 926 | |
997 | 927 | switch (ctx->opcode & 0xff00) { |
998 | 928 | case 0xc900: /* and #imm,R0 */ |
999 | - tcg_gen_andi_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); | |
929 | + tcg_gen_andi_i32(REG(0), REG(0), B7_0); | |
1000 | 930 | return; |
1001 | 931 | case 0xcd00: /* and.b #imm,@(R0,GBR) */ |
1002 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1003 | - tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); | |
1004 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1005 | - tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
932 | + tcg_gen_add_i32(cpu_T[1], REG(0), cpu_gbr); | |
933 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[1], ctx->memidx); | |
1006 | 934 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], B7_0); |
1007 | 935 | tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); |
1008 | 936 | return; |
... | ... | @@ -1029,78 +957,57 @@ void _decode_opc(DisasContext * ctx) |
1029 | 957 | ctx->flags |= DELAY_SLOT_CONDITIONAL; |
1030 | 958 | return; |
1031 | 959 | case 0x8800: /* cmp/eq #imm,R0 */ |
1032 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1033 | - gen_cmp_imm(TCG_COND_EQ, cpu_T[0], B7_0s); | |
960 | + gen_cmp_imm(TCG_COND_EQ, REG(0), B7_0s); | |
1034 | 961 | return; |
1035 | 962 | case 0xc400: /* mov.b @(disp,GBR),R0 */ |
1036 | 963 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0); |
1037 | - tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1038 | - tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | |
964 | + tcg_gen_qemu_ld8s(REG(0), cpu_T[0], ctx->memidx); | |
1039 | 965 | return; |
1040 | 966 | case 0xc500: /* mov.w @(disp,GBR),R0 */ |
1041 | 967 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0 * 2); |
1042 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1043 | - tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | |
968 | + tcg_gen_qemu_ld16s(REG(0), cpu_T[0], ctx->memidx); | |
1044 | 969 | return; |
1045 | 970 | case 0xc600: /* mov.l @(disp,GBR),R0 */ |
1046 | 971 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0 * 4); |
1047 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1048 | - tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | |
972 | + tcg_gen_qemu_ld32s(REG(0), cpu_T[0], ctx->memidx); | |
1049 | 973 | return; |
1050 | 974 | case 0xc000: /* mov.b R0,@(disp,GBR) */ |
1051 | 975 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0); |
1052 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1053 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1054 | - tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
976 | + tcg_gen_qemu_st8(REG(0), cpu_T[0], ctx->memidx); | |
1055 | 977 | return; |
1056 | 978 | case 0xc100: /* mov.w R0,@(disp,GBR) */ |
1057 | 979 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0 * 2); |
1058 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1059 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1060 | - tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
980 | + tcg_gen_qemu_st16(REG(0), cpu_T[0], ctx->memidx); | |
1061 | 981 | return; |
1062 | 982 | case 0xc200: /* mov.l R0,@(disp,GBR) */ |
1063 | 983 | tcg_gen_addi_i32(cpu_T[0], cpu_gbr, B7_0 * 4); |
1064 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1065 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1066 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
984 | + tcg_gen_qemu_st32(REG(0), cpu_T[0], ctx->memidx); | |
1067 | 985 | return; |
1068 | 986 | case 0x8000: /* mov.b R0,@(disp,Rn) */ |
1069 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1070 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); | |
1071 | - tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0); | |
1072 | - tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
987 | + tcg_gen_addi_i32(cpu_T[0], REG(B7_4), B3_0); | |
988 | + tcg_gen_qemu_st8(REG(0), cpu_T[0], ctx->memidx); | |
1073 | 989 | return; |
1074 | 990 | case 0x8100: /* mov.w R0,@(disp,Rn) */ |
1075 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1076 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); | |
1077 | - tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 2); | |
1078 | - tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
991 | + tcg_gen_addi_i32(cpu_T[0], REG(B7_4), B3_0 * 2); | |
992 | + tcg_gen_qemu_st16(REG(0), cpu_T[0], ctx->memidx); | |
1079 | 993 | return; |
1080 | 994 | case 0x8400: /* mov.b @(disp,Rn),R0 */ |
1081 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
1082 | - tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0); | |
1083 | - tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1084 | - tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | |
995 | + tcg_gen_addi_i32(cpu_T[0], REG(B7_4), B3_0); | |
996 | + tcg_gen_qemu_ld8s(REG(0), cpu_T[0], ctx->memidx); | |
1085 | 997 | return; |
1086 | 998 | case 0x8500: /* mov.w @(disp,Rn),R0 */ |
1087 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
1088 | - tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 2); | |
1089 | - tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1090 | - tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | |
999 | + tcg_gen_addi_i32(cpu_T[0], REG(B7_4), B3_0 * 2); | |
1000 | + tcg_gen_qemu_ld16s(REG(0), cpu_T[0], ctx->memidx); | |
1091 | 1001 | return; |
1092 | 1002 | case 0xc700: /* mova @(disp,PC),R0 */ |
1093 | - tcg_gen_movi_i32(cpu_gregs[REG(0)], | |
1094 | - ((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3); | |
1003 | + tcg_gen_movi_i32(REG(0), ((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3); | |
1095 | 1004 | return; |
1096 | 1005 | case 0xcb00: /* or #imm,R0 */ |
1097 | - tcg_gen_ori_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); | |
1006 | + tcg_gen_ori_i32(REG(0), REG(0), B7_0); | |
1098 | 1007 | return; |
1099 | 1008 | case 0xcf00: /* or.b #imm,@(R0,GBR) */ |
1100 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1101 | - tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); | |
1102 | - tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | |
1103 | - tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
1009 | + tcg_gen_add_i32(cpu_T[1], REG(0), cpu_gbr); | |
1010 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[1], ctx->memidx); | |
1104 | 1011 | tcg_gen_ori_i32(cpu_T[0], cpu_T[0], B7_0); |
1105 | 1012 | tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); |
1106 | 1013 | return; |
... | ... | @@ -1112,24 +1019,21 @@ void _decode_opc(DisasContext * ctx) |
1112 | 1019 | ctx->bstate = BS_BRANCH; |
1113 | 1020 | return; |
1114 | 1021 | case 0xc800: /* tst #imm,R0 */ |
1115 | - tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(0)], B7_0); | |
1022 | + tcg_gen_andi_i32(cpu_T[0], REG(0), B7_0); | |
1116 | 1023 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
1117 | 1024 | return; |
1118 | 1025 | case 0xcc00: /* tst.b #imm,@(R0,GBR) */ |
1119 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1120 | - tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); | |
1026 | + tcg_gen_add_i32(cpu_T[0], REG(0), cpu_gbr); | |
1121 | 1027 | tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); |
1122 | 1028 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], B7_0); |
1123 | 1029 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
1124 | 1030 | return; |
1125 | 1031 | case 0xca00: /* xor #imm,R0 */ |
1126 | - tcg_gen_xori_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); | |
1032 | + tcg_gen_xori_i32(REG(0), REG(0), B7_0); | |
1127 | 1033 | return; |
1128 | 1034 | case 0xce00: /* xor.b #imm,@(R0,GBR) */ |
1129 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1130 | - tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); | |
1131 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1132 | - tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
1035 | + tcg_gen_add_i32(cpu_T[1], REG(0), cpu_gbr); | |
1036 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[1], ctx->memidx); | |
1133 | 1037 | tcg_gen_xori_i32(cpu_T[0], cpu_T[0], B7_0); |
1134 | 1038 | tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); |
1135 | 1039 | return; |
... | ... | @@ -1137,103 +1041,92 @@ void _decode_opc(DisasContext * ctx) |
1137 | 1041 | |
1138 | 1042 | switch (ctx->opcode & 0xf08f) { |
1139 | 1043 | case 0x408e: /* ldc Rm,Rn_BANK */ |
1140 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1141 | - tcg_gen_mov_i32(cpu_gregs[ALTREG(B6_4)], cpu_T[0]); | |
1044 | + tcg_gen_mov_i32(ALTREG(B6_4), REG(B11_8)); | |
1142 | 1045 | return; |
1143 | 1046 | case 0x4087: /* ldc.l @Rm+,Rn_BANK */ |
1144 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1145 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1146 | - tcg_gen_mov_i32(cpu_gregs[ALTREG(B6_4)], cpu_T[0]); | |
1147 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1047 | + tcg_gen_qemu_ld32s(ALTREG(B6_4), REG(B11_8), ctx->memidx); | |
1048 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); | |
1148 | 1049 | return; |
1149 | 1050 | case 0x0082: /* stc Rm_BANK,Rn */ |
1150 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); | |
1151 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
1051 | + tcg_gen_mov_i32(REG(B11_8), ALTREG(B6_4)); | |
1152 | 1052 | return; |
1153 | 1053 | case 0x4083: /* stc.l Rm_BANK,@-Rn */ |
1154 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1155 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
1156 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); | |
1157 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1158 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
1159 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1054 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 4); | |
1055 | + tcg_gen_qemu_st32(ALTREG(B6_4), cpu_T[0], ctx->memidx); | |
1056 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
1160 | 1057 | return; |
1161 | 1058 | } |
1162 | 1059 | |
1163 | 1060 | switch (ctx->opcode & 0xf0ff) { |
1164 | 1061 | case 0x0023: /* braf Rn */ |
1165 | - CHECK_NOT_DELAY_SLOT tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1166 | - tcg_gen_addi_i32(cpu_delayed_pc, cpu_T[0], ctx->pc + 4); | |
1062 | + CHECK_NOT_DELAY_SLOT | |
1063 | + tcg_gen_addi_i32(cpu_delayed_pc, REG(B11_8), ctx->pc + 4); | |
1167 | 1064 | ctx->flags |= DELAY_SLOT; |
1168 | 1065 | ctx->delayed_pc = (uint32_t) - 1; |
1169 | 1066 | return; |
1170 | 1067 | case 0x0003: /* bsrf Rn */ |
1171 | - CHECK_NOT_DELAY_SLOT tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1068 | + CHECK_NOT_DELAY_SLOT | |
1172 | 1069 | tcg_gen_movi_i32(cpu_pr, ctx->pc + 4); |
1173 | - tcg_gen_add_i32(cpu_delayed_pc, cpu_T[0], cpu_pr); | |
1070 | + tcg_gen_add_i32(cpu_delayed_pc, REG(B11_8), cpu_pr); | |
1174 | 1071 | ctx->flags |= DELAY_SLOT; |
1175 | 1072 | ctx->delayed_pc = (uint32_t) - 1; |
1176 | 1073 | return; |
1177 | 1074 | case 0x4015: /* cmp/pl Rn */ |
1178 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1179 | - gen_cmp_imm(TCG_COND_GT, cpu_T[0], 0); | |
1075 | + gen_cmp_imm(TCG_COND_GT, REG(B11_8), 0); | |
1180 | 1076 | return; |
1181 | 1077 | case 0x4011: /* cmp/pz Rn */ |
1182 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1183 | - gen_cmp_imm(TCG_COND_GE, cpu_T[0], 0); | |
1078 | + gen_cmp_imm(TCG_COND_GE, REG(B11_8), 0); | |
1184 | 1079 | return; |
1185 | 1080 | case 0x4010: /* dt Rn */ |
1186 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1187 | - gen_cmp_imm(TCG_COND_EQ, cpu_gregs[REG(B11_8)], 0); | |
1081 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 1); | |
1082 | + gen_cmp_imm(TCG_COND_EQ, REG(B11_8), 0); | |
1188 | 1083 | return; |
1189 | 1084 | case 0x402b: /* jmp @Rn */ |
1190 | - CHECK_NOT_DELAY_SLOT tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1191 | - tcg_gen_mov_i32(cpu_delayed_pc, cpu_T[0]); | |
1085 | + CHECK_NOT_DELAY_SLOT | |
1086 | + tcg_gen_mov_i32(cpu_delayed_pc, REG(B11_8)); | |
1192 | 1087 | ctx->flags |= DELAY_SLOT; |
1193 | 1088 | ctx->delayed_pc = (uint32_t) - 1; |
1194 | 1089 | return; |
1195 | 1090 | case 0x400b: /* jsr @Rn */ |
1196 | - CHECK_NOT_DELAY_SLOT tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1091 | + CHECK_NOT_DELAY_SLOT | |
1197 | 1092 | tcg_gen_movi_i32(cpu_pr, ctx->pc + 4); |
1198 | - tcg_gen_mov_i32(cpu_delayed_pc, cpu_T[0]); | |
1093 | + tcg_gen_mov_i32(cpu_delayed_pc, REG(B11_8)); | |
1199 | 1094 | ctx->flags |= DELAY_SLOT; |
1200 | 1095 | ctx->delayed_pc = (uint32_t) - 1; |
1201 | 1096 | return; |
1202 | 1097 | case 0x400e: /* lds Rm,SR */ |
1203 | - tcg_gen_andi_i32(cpu_sr, cpu_gregs[REG(B11_8)], 0x700083f3); | |
1098 | + tcg_gen_andi_i32(cpu_sr, REG(B11_8), 0x700083f3); | |
1204 | 1099 | ctx->bstate = BS_STOP; |
1205 | 1100 | return; |
1206 | 1101 | case 0x4007: /* lds.l @Rm+,SR */ |
1207 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_gregs[REG(B11_8)], ctx->memidx); | |
1208 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1102 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B11_8), ctx->memidx); | |
1103 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); | |
1209 | 1104 | tcg_gen_andi_i32(cpu_sr, cpu_T[0], 0x700083f3); |
1210 | 1105 | ctx->bstate = BS_STOP; |
1211 | 1106 | return; |
1212 | 1107 | case 0x0002: /* sts SR,Rn */ |
1213 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_sr); | |
1108 | + tcg_gen_mov_i32(REG(B11_8), cpu_sr); | |
1214 | 1109 | return; |
1215 | 1110 | case 0x4003: /* sts SR,@-Rn */ |
1216 | - tcg_gen_subi_i32(cpu_T[0], cpu_gregs[REG(B11_8)], 4); | |
1111 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 4); | |
1217 | 1112 | tcg_gen_qemu_st32(cpu_sr, cpu_T[0], ctx->memidx); |
1218 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1113 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
1219 | 1114 | return; |
1220 | 1115 | #define LDST(reg,ldnum,ldpnum,stnum,stpnum) \ |
1221 | 1116 | case ldnum: \ |
1222 | - tcg_gen_mov_i32 (cpu_##reg, cpu_gregs[REG(B11_8)]); \ | |
1117 | + tcg_gen_mov_i32 (cpu_##reg, REG(B11_8)); \ | |
1223 | 1118 | return; \ |
1224 | 1119 | case ldpnum: \ |
1225 | - tcg_gen_qemu_ld32s (cpu_##reg, cpu_gregs[REG(B11_8)], ctx->memidx); \ | |
1226 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], \ | |
1227 | - cpu_gregs[REG(B11_8)], 4); \ | |
1120 | + tcg_gen_qemu_ld32s (cpu_##reg, REG(B11_8), ctx->memidx); \ | |
1121 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); \ | |
1228 | 1122 | return; \ |
1229 | 1123 | case stnum: \ |
1230 | - tcg_gen_mov_i32 (cpu_gregs[REG(B11_8)], cpu_##reg); \ | |
1124 | + tcg_gen_mov_i32 (REG(B11_8), cpu_##reg); \ | |
1231 | 1125 | return; \ |
1232 | 1126 | case stpnum: \ |
1233 | - tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 4); \ | |
1234 | - tcg_gen_qemu_st32 (cpu_##reg, cpu_T[1], ctx->memidx); \ | |
1235 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], \ | |
1236 | - cpu_gregs[REG(B11_8)], 4); \ | |
1127 | + tcg_gen_subi_i32(cpu_T[0], REG(B11_8), 4); \ | |
1128 | + tcg_gen_qemu_st32 (cpu_##reg, cpu_T[0], ctx->memidx); \ | |
1129 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); \ | |
1237 | 1130 | return; |
1238 | 1131 | LDST(gbr, 0x401e, 0x4017, 0x0012, 0x4013) |
1239 | 1132 | LDST(vbr, 0x402e, 0x4027, 0x0022, 0x4023) |
... | ... | @@ -1245,104 +1138,98 @@ void _decode_opc(DisasContext * ctx) |
1245 | 1138 | LDST(pr, 0x402a, 0x4026, 0x002a, 0x4022) |
1246 | 1139 | LDST(fpul, 0x405a, 0x4056, 0x005a, 0x4052) |
1247 | 1140 | case 0x406a: /* lds Rm,FPSCR */ |
1248 | - tcg_gen_helper_0_1(helper_ld_fpscr, cpu_gregs[REG(B11_8)]); | |
1141 | + tcg_gen_helper_0_1(helper_ld_fpscr, REG(B11_8)); | |
1249 | 1142 | ctx->bstate = BS_STOP; |
1250 | 1143 | return; |
1251 | 1144 | case 0x4066: /* lds.l @Rm+,FPSCR */ |
1252 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_gregs[REG(B11_8)], ctx->memidx); | |
1253 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1145 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B11_8), ctx->memidx); | |
1146 | + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); | |
1254 | 1147 | tcg_gen_helper_0_1(helper_ld_fpscr, cpu_T[0]); |
1255 | 1148 | ctx->bstate = BS_STOP; |
1256 | 1149 | return; |
1257 | 1150 | case 0x006a: /* sts FPSCR,Rn */ |
1258 | 1151 | tcg_gen_andi_i32(cpu_T[0], cpu_fpscr, 0x003fffff); |
1259 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | |
1152 | + tcg_gen_mov_i32(REG(B11_8), cpu_T[0]); | |
1260 | 1153 | return; |
1261 | 1154 | case 0x4062: /* sts FPSCR,@-Rn */ |
1262 | 1155 | tcg_gen_andi_i32(cpu_T[0], cpu_fpscr, 0x003fffff); |
1263 | - tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 4); | |
1156 | + tcg_gen_subi_i32(cpu_T[1], REG(B11_8), 4); | |
1264 | 1157 | tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); |
1265 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | |
1158 | + tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); | |
1266 | 1159 | return; |
1267 | 1160 | case 0x00c3: /* movca.l R0,@Rm */ |
1268 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | |
1269 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
1270 | - tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
1161 | + tcg_gen_qemu_st32(REG(0), REG(B11_8), ctx->memidx); | |
1271 | 1162 | return; |
1272 | 1163 | case 0x0029: /* movt Rn */ |
1273 | - tcg_gen_andi_i32(cpu_gregs[REG(B11_8)], cpu_sr, SR_T); | |
1164 | + tcg_gen_andi_i32(REG(B11_8), cpu_sr, SR_T); | |
1274 | 1165 | return; |
1275 | 1166 | case 0x0093: /* ocbi @Rn */ |
1276 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1277 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1167 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B11_8), ctx->memidx); | |
1278 | 1168 | return; |
1279 | 1169 | case 0x00a3: /* ocbp @Rn */ |
1280 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1281 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1170 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B11_8), ctx->memidx); | |
1282 | 1171 | return; |
1283 | 1172 | case 0x00b3: /* ocbwb @Rn */ |
1284 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1285 | - tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
1173 | + tcg_gen_qemu_ld32s(cpu_T[0], REG(B11_8), ctx->memidx); | |
1286 | 1174 | return; |
1287 | 1175 | case 0x0083: /* pref @Rn */ |
1288 | 1176 | return; |
1289 | 1177 | case 0x4024: /* rotcl Rn */ |
1290 | 1178 | tcg_gen_mov_i32(cpu_T[0], cpu_sr); |
1291 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 31); | |
1292 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1293 | - gen_copy_bit_i32(cpu_gregs[REG(B11_8)], 0, cpu_T[0], 0); | |
1179 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 31); | |
1180 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 1); | |
1181 | + gen_copy_bit_i32(REG(B11_8), 0, cpu_T[0], 0); | |
1294 | 1182 | return; |
1295 | 1183 | case 0x4025: /* rotcr Rn */ |
1296 | 1184 | tcg_gen_mov_i32(cpu_T[0], cpu_sr); |
1297 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 0); | |
1298 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1299 | - gen_copy_bit_i32(cpu_gregs[REG(B11_8)], 31, cpu_T[0], 0); | |
1185 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 0); | |
1186 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 1); | |
1187 | + gen_copy_bit_i32(REG(B11_8), 31, cpu_T[0], 0); | |
1300 | 1188 | return; |
1301 | 1189 | case 0x4004: /* rotl Rn */ |
1302 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 31); | |
1303 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1304 | - gen_copy_bit_i32(cpu_gregs[REG(B11_8)], 0, cpu_sr, 0); | |
1190 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 31); | |
1191 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 1); | |
1192 | + gen_copy_bit_i32(REG(B11_8), 0, cpu_sr, 0); | |
1305 | 1193 | return; |
1306 | 1194 | case 0x4005: /* rotr Rn */ |
1307 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 0); | |
1308 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1309 | - gen_copy_bit_i32(cpu_gregs[REG(B11_8)], 31, cpu_sr, 0); | |
1195 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 0); | |
1196 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 1); | |
1197 | + gen_copy_bit_i32(REG(B11_8), 31, cpu_sr, 0); | |
1310 | 1198 | return; |
1311 | 1199 | case 0x4000: /* shll Rn */ |
1312 | 1200 | case 0x4020: /* shal Rn */ |
1313 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 31); | |
1314 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1201 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 31); | |
1202 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 1); | |
1315 | 1203 | return; |
1316 | 1204 | case 0x4021: /* shar Rn */ |
1317 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 0); | |
1318 | - tcg_gen_sari_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1205 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 0); | |
1206 | + tcg_gen_sari_i32(REG(B11_8), REG(B11_8), 1); | |
1319 | 1207 | return; |
1320 | 1208 | case 0x4001: /* shlr Rn */ |
1321 | - gen_copy_bit_i32(cpu_sr, 0, cpu_gregs[REG(B11_8)], 0); | |
1322 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); | |
1209 | + gen_copy_bit_i32(cpu_sr, 0, REG(B11_8), 0); | |
1210 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 1); | |
1323 | 1211 | return; |
1324 | 1212 | case 0x4008: /* shll2 Rn */ |
1325 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); | |
1213 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 2); | |
1326 | 1214 | return; |
1327 | 1215 | case 0x4018: /* shll8 Rn */ |
1328 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); | |
1216 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 8); | |
1329 | 1217 | return; |
1330 | 1218 | case 0x4028: /* shll16 Rn */ |
1331 | - tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 16); | |
1219 | + tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 16); | |
1332 | 1220 | return; |
1333 | 1221 | case 0x4009: /* shlr2 Rn */ |
1334 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); | |
1222 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 2); | |
1335 | 1223 | return; |
1336 | 1224 | case 0x4019: /* shlr8 Rn */ |
1337 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); | |
1225 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 8); | |
1338 | 1226 | return; |
1339 | 1227 | case 0x4029: /* shlr16 Rn */ |
1340 | - tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 16); | |
1228 | + tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 16); | |
1341 | 1229 | return; |
1342 | 1230 | case 0x401b: /* tas.b @Rn */ |
1343 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | |
1344 | - tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); | |
1345 | - tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
1231 | + tcg_gen_mov_i32(cpu_T[1], REG(B11_8)); | |
1232 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[1], ctx->memidx); | |
1346 | 1233 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
1347 | 1234 | tcg_gen_ori_i32(cpu_T[0], cpu_T[0], 0x80); |
1348 | 1235 | tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | ... | ... |