Commit fa4da1074c67a81e09d2bb99b406e1676769be89
1 parent
6f06939b
SH4: Convert memory loads/stores to TCG
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5117 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
58 additions
and
126 deletions
target-sh4/op_mem.c
| ... | ... | @@ -17,46 +17,6 @@ |
| 17 | 17 | * License along with this library; if not, write to the Free Software |
| 18 | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | 19 | */ |
| 20 | -void glue(op_ldb_T0_T0, MEMSUFFIX) (void) { | |
| 21 | - T0 = glue(ldsb, MEMSUFFIX) (T0); | |
| 22 | - RETURN(); | |
| 23 | -} | |
| 24 | - | |
| 25 | -void glue(op_ldub_T0_T0, MEMSUFFIX) (void) { | |
| 26 | - T0 = glue(ldub, MEMSUFFIX) (T0); | |
| 27 | - RETURN(); | |
| 28 | -} | |
| 29 | - | |
| 30 | -void glue(op_stb_T0_T1, MEMSUFFIX) (void) { | |
| 31 | - glue(stb, MEMSUFFIX) (T1, T0); | |
| 32 | - RETURN(); | |
| 33 | -} | |
| 34 | - | |
| 35 | -void glue(op_ldw_T0_T0, MEMSUFFIX) (void) { | |
| 36 | - T0 = glue(ldsw, MEMSUFFIX) (T0); | |
| 37 | - RETURN(); | |
| 38 | -} | |
| 39 | - | |
| 40 | -void glue(op_lduw_T0_T0, MEMSUFFIX) (void) { | |
| 41 | - T0 = glue(lduw, MEMSUFFIX) (T0); | |
| 42 | - RETURN(); | |
| 43 | -} | |
| 44 | - | |
| 45 | -void glue(op_stw_T0_T1, MEMSUFFIX) (void) { | |
| 46 | - glue(stw, MEMSUFFIX) (T1, T0); | |
| 47 | - RETURN(); | |
| 48 | -} | |
| 49 | - | |
| 50 | -void glue(op_ldl_T0_T0, MEMSUFFIX) (void) { | |
| 51 | - T0 = glue(ldl, MEMSUFFIX) (T0); | |
| 52 | - RETURN(); | |
| 53 | -} | |
| 54 | - | |
| 55 | -void glue(op_stl_T0_T1, MEMSUFFIX) (void) { | |
| 56 | - glue(stl, MEMSUFFIX) (T1, T0); | |
| 57 | - RETURN(); | |
| 58 | -} | |
| 59 | - | |
| 60 | 20 | void glue(op_ldfl_T0_FT0, MEMSUFFIX) (void) { |
| 61 | 21 | FT0 = glue(ldfl, MEMSUFFIX) (T0); |
| 62 | 22 | RETURN(); | ... | ... |
target-sh4/translate.c
| ... | ... | @@ -163,14 +163,6 @@ static void sh4_translate_init(void) |
| 163 | 163 | |
| 164 | 164 | #endif |
| 165 | 165 | |
| 166 | -GEN_OP_LD(ub, T0) | |
| 167 | -GEN_OP_LD(b, T0) | |
| 168 | -GEN_OP_ST(b, T0) | |
| 169 | -GEN_OP_LD(uw, T0) | |
| 170 | -GEN_OP_LD(w, T0) | |
| 171 | -GEN_OP_ST(w, T0) | |
| 172 | -GEN_OP_LD(l, T0) | |
| 173 | -GEN_OP_ST(l, T0) | |
| 174 | 166 | GEN_OP_LD(fl, FT0) |
| 175 | 167 | GEN_OP_ST(fl, FT0) |
| 176 | 168 | GEN_OP_LD(fq, DT0) |
| ... | ... | @@ -441,12 +433,12 @@ void _decode_opc(DisasContext * ctx) |
| 441 | 433 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 442 | 434 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 443 | 435 | tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 4); |
| 444 | - gen_op_stl_T0_T1(ctx); | |
| 436 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 445 | 437 | return; |
| 446 | 438 | case 0x5000: /* mov.l @(disp,Rm),Rn */ |
| 447 | 439 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 448 | 440 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 4); |
| 449 | - gen_op_ldl_T0_T0(ctx); | |
| 441 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 450 | 442 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 451 | 443 | return; |
| 452 | 444 | case 0xe000: /* mov #imm,Rn */ |
| ... | ... | @@ -454,12 +446,12 @@ void _decode_opc(DisasContext * ctx) |
| 454 | 446 | return; |
| 455 | 447 | case 0x9000: /* mov.w @(disp,PC),Rn */ |
| 456 | 448 | tcg_gen_movi_i32(cpu_T[0], ctx->pc + 4 + B7_0 * 2); |
| 457 | - gen_op_ldw_T0_T0(ctx); | |
| 449 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 458 | 450 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 459 | 451 | return; |
| 460 | 452 | case 0xd000: /* mov.l @(disp,PC),Rn */ |
| 461 | 453 | tcg_gen_movi_i32(cpu_T[0], (ctx->pc + 4 + B7_0 * 4) & ~3); |
| 462 | - gen_op_ldl_T0_T0(ctx); | |
| 454 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 463 | 455 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 464 | 456 | return; |
| 465 | 457 | case 0x7000: /* add #imm,Rn */ |
| ... | ... | @@ -488,69 +480,54 @@ void _decode_opc(DisasContext * ctx) |
| 488 | 480 | case 0x2000: /* mov.b Rm,@Rn */ |
| 489 | 481 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 490 | 482 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 491 | - gen_op_stb_T0_T1(ctx); | |
| 483 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 492 | 484 | return; |
| 493 | 485 | case 0x2001: /* mov.w Rm,@Rn */ |
| 494 | 486 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 495 | 487 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 496 | - gen_op_stw_T0_T1(ctx); | |
| 488 | + tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 497 | 489 | return; |
| 498 | 490 | case 0x2002: /* mov.l Rm,@Rn */ |
| 499 | 491 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 500 | 492 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 501 | - gen_op_stl_T0_T1(ctx); | |
| 493 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 502 | 494 | return; |
| 503 | 495 | case 0x6000: /* mov.b @Rm,Rn */ |
| 504 | 496 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 505 | - gen_op_ldb_T0_T0(ctx); | |
| 497 | + tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 506 | 498 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 507 | 499 | return; |
| 508 | 500 | case 0x6001: /* mov.w @Rm,Rn */ |
| 509 | 501 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 510 | - gen_op_ldw_T0_T0(ctx); | |
| 502 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 511 | 503 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 512 | 504 | return; |
| 513 | 505 | case 0x6002: /* mov.l @Rm,Rn */ |
| 514 | 506 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 515 | - gen_op_ldl_T0_T0(ctx); | |
| 507 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 516 | 508 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 517 | 509 | return; |
| 518 | 510 | case 0x2004: /* mov.b Rm,@-Rn */ |
| 519 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
| 520 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
| 521 | - cpu_gregs[REG(B11_8)], 1); /* modify register status */ | |
| 522 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
| 523 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], | |
| 524 | - cpu_gregs[REG(B11_8)], 1); /* recover register status */ | |
| 525 | - gen_op_stb_T0_T1(ctx); /* might cause re-execution */ | |
| 511 | + tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 1); | |
| 512 | + tcg_gen_qemu_st8(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); /* might cause re-execution */ | |
| 526 | 513 | tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 527 | - cpu_gregs[REG(B11_8)], 1); /* modify register status */ | |
| 514 | + cpu_gregs[REG(B11_8)], 1); /* modify register status */ | |
| 528 | 515 | return; |
| 529 | 516 | case 0x2005: /* mov.w Rm,@-Rn */ |
| 530 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
| 531 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
| 532 | - cpu_gregs[REG(B11_8)], 2); | |
| 533 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
| 534 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], | |
| 535 | - cpu_gregs[REG(B11_8)], 2); | |
| 536 | - gen_op_stw_T0_T1(ctx); | |
| 517 | + tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 2); | |
| 518 | + tcg_gen_qemu_st16(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); | |
| 537 | 519 | tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 538 | 520 | cpu_gregs[REG(B11_8)], 2); |
| 539 | 521 | return; |
| 540 | 522 | case 0x2006: /* mov.l Rm,@-Rn */ |
| 541 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
| 542 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | |
| 543 | - cpu_gregs[REG(B11_8)], 4); | |
| 544 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | |
| 545 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], | |
| 546 | - cpu_gregs[REG(B11_8)], 4); | |
| 547 | - gen_op_stl_T0_T1(ctx); | |
| 523 | + tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 4); | |
| 524 | + tcg_gen_qemu_st32(cpu_gregs[REG(B7_4)], cpu_T[1], ctx->memidx); | |
| 548 | 525 | tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 549 | 526 | cpu_gregs[REG(B11_8)], 4); |
| 550 | 527 | return; |
| 551 | 528 | case 0x6004: /* mov.b @Rm+,Rn */ |
| 552 | 529 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 553 | - gen_op_ldb_T0_T0(ctx); | |
| 530 | + tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 554 | 531 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 555 | 532 | if ( B11_8 != B7_4 ) |
| 556 | 533 | tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| ... | ... | @@ -558,7 +535,7 @@ void _decode_opc(DisasContext * ctx) |
| 558 | 535 | return; |
| 559 | 536 | case 0x6005: /* mov.w @Rm+,Rn */ |
| 560 | 537 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 561 | - gen_op_ldw_T0_T0(ctx); | |
| 538 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 562 | 539 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 563 | 540 | if ( B11_8 != B7_4 ) |
| 564 | 541 | tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| ... | ... | @@ -566,7 +543,7 @@ void _decode_opc(DisasContext * ctx) |
| 566 | 543 | return; |
| 567 | 544 | case 0x6006: /* mov.l @Rm+,Rn */ |
| 568 | 545 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 569 | - gen_op_ldl_T0_T0(ctx); | |
| 546 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 570 | 547 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 571 | 548 | if ( B11_8 != B7_4 ) |
| 572 | 549 | tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| ... | ... | @@ -576,33 +553,33 @@ void _decode_opc(DisasContext * ctx) |
| 576 | 553 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 577 | 554 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 578 | 555 | tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 579 | - gen_op_stb_T0_T1(ctx); | |
| 556 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 580 | 557 | return; |
| 581 | 558 | case 0x0005: /* mov.w Rm,@(R0,Rn) */ |
| 582 | 559 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 583 | 560 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 584 | 561 | tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 585 | - gen_op_stw_T0_T1(ctx); | |
| 562 | + tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 586 | 563 | return; |
| 587 | 564 | case 0x0006: /* mov.l Rm,@(R0,Rn) */ |
| 588 | 565 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 589 | 566 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 590 | 567 | tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 591 | - gen_op_stl_T0_T1(ctx); | |
| 568 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 592 | 569 | return; |
| 593 | 570 | case 0x000c: /* mov.b @(R0,Rm),Rn */ |
| 594 | 571 | tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 595 | - gen_op_ldb_T0_T0(ctx); | |
| 572 | + tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 596 | 573 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 597 | 574 | return; |
| 598 | 575 | case 0x000d: /* mov.w @(R0,Rm),Rn */ |
| 599 | 576 | tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 600 | - gen_op_ldw_T0_T0(ctx); | |
| 577 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 601 | 578 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 602 | 579 | return; |
| 603 | 580 | case 0x000e: /* mov.l @(R0,Rm),Rn */ |
| 604 | 581 | tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 605 | - gen_op_ldl_T0_T0(ctx); | |
| 582 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 606 | 583 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 607 | 584 | return; |
| 608 | 585 | case 0x6008: /* swap.b Rm,Rn */ |
| ... | ... | @@ -737,20 +714,20 @@ void _decode_opc(DisasContext * ctx) |
| 737 | 714 | return; |
| 738 | 715 | case 0x000f: /* mac.l @Rm+,@Rn+ */ |
| 739 | 716 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 740 | - gen_op_ldl_T0_T0(ctx); | |
| 717 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 741 | 718 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 742 | 719 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 743 | - gen_op_ldl_T0_T0(ctx); | |
| 720 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 744 | 721 | tcg_gen_helper_0_2(helper_macl, cpu_T[0], cpu_T[1]); |
| 745 | 722 | tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 4); |
| 746 | 723 | tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 747 | 724 | return; |
| 748 | 725 | case 0x400f: /* mac.w @Rm+,@Rn+ */ |
| 749 | 726 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 750 | - gen_op_ldl_T0_T0(ctx); | |
| 727 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 751 | 728 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 752 | 729 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 753 | - gen_op_ldl_T0_T0(ctx); | |
| 730 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 754 | 731 | tcg_gen_helper_0_2(helper_macw, cpu_T[0], cpu_T[1]); |
| 755 | 732 | tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); |
| 756 | 733 | tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 2); |
| ... | ... | @@ -951,9 +928,9 @@ void _decode_opc(DisasContext * ctx) |
| 951 | 928 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 952 | 929 | tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); |
| 953 | 930 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 954 | - gen_op_ldub_T0_T0(ctx); | |
| 931 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 955 | 932 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 956 | - gen_op_stb_T0_T1(ctx); | |
| 933 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 957 | 934 | return; |
| 958 | 935 | case 0x8b00: /* bf label */ |
| 959 | 936 | CHECK_NOT_DELAY_SLOT |
| ... | ... | @@ -984,19 +961,19 @@ void _decode_opc(DisasContext * ctx) |
| 984 | 961 | case 0xc400: /* mov.b @(disp,GBR),R0 */ |
| 985 | 962 | gen_op_stc_gbr_T0(); |
| 986 | 963 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 987 | - gen_op_ldb_T0_T0(ctx); | |
| 964 | + tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 988 | 965 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 989 | 966 | return; |
| 990 | 967 | case 0xc500: /* mov.w @(disp,GBR),R0 */ |
| 991 | 968 | gen_op_stc_gbr_T0(); |
| 992 | 969 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 2); |
| 993 | - gen_op_ldw_T0_T0(ctx); | |
| 970 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 994 | 971 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 995 | 972 | return; |
| 996 | 973 | case 0xc600: /* mov.l @(disp,GBR),R0 */ |
| 997 | 974 | gen_op_stc_gbr_T0(); |
| 998 | 975 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 4); |
| 999 | - gen_op_ldl_T0_T0(ctx); | |
| 976 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1000 | 977 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 1001 | 978 | return; |
| 1002 | 979 | case 0xc000: /* mov.b R0,@(disp,GBR) */ |
| ... | ... | @@ -1004,44 +981,44 @@ void _decode_opc(DisasContext * ctx) |
| 1004 | 981 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 1005 | 982 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 1006 | 983 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1007 | - gen_op_stb_T0_T1(ctx); | |
| 984 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1008 | 985 | return; |
| 1009 | 986 | case 0xc100: /* mov.w R0,@(disp,GBR) */ |
| 1010 | 987 | gen_op_stc_gbr_T0(); |
| 1011 | 988 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 2); |
| 1012 | 989 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 1013 | 990 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1014 | - gen_op_stw_T0_T1(ctx); | |
| 991 | + tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1015 | 992 | return; |
| 1016 | 993 | case 0xc200: /* mov.l R0,@(disp,GBR) */ |
| 1017 | 994 | gen_op_stc_gbr_T0(); |
| 1018 | 995 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 4); |
| 1019 | 996 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 1020 | 997 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1021 | - gen_op_stl_T0_T1(ctx); | |
| 998 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1022 | 999 | return; |
| 1023 | 1000 | case 0x8000: /* mov.b R0,@(disp,Rn) */ |
| 1024 | 1001 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1025 | 1002 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); |
| 1026 | 1003 | tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0); |
| 1027 | - gen_op_stb_T0_T1(ctx); | |
| 1004 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1028 | 1005 | return; |
| 1029 | 1006 | case 0x8100: /* mov.w R0,@(disp,Rn) */ |
| 1030 | 1007 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1031 | 1008 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); |
| 1032 | 1009 | tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 2); |
| 1033 | - gen_op_stw_T0_T1(ctx); | |
| 1010 | + tcg_gen_qemu_st16(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1034 | 1011 | return; |
| 1035 | 1012 | case 0x8400: /* mov.b @(disp,Rn),R0 */ |
| 1036 | 1013 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 1037 | 1014 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0); |
| 1038 | - gen_op_ldb_T0_T0(ctx); | |
| 1015 | + tcg_gen_qemu_ld8s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1039 | 1016 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 1040 | 1017 | return; |
| 1041 | 1018 | case 0x8500: /* mov.w @(disp,Rn),R0 */ |
| 1042 | 1019 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 1043 | 1020 | tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 2); |
| 1044 | - gen_op_ldw_T0_T0(ctx); | |
| 1021 | + tcg_gen_qemu_ld16s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1045 | 1022 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 1046 | 1023 | return; |
| 1047 | 1024 | case 0xc700: /* mova @(disp,PC),R0 */ |
| ... | ... | @@ -1055,9 +1032,9 @@ void _decode_opc(DisasContext * ctx) |
| 1055 | 1032 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1056 | 1033 | tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); |
| 1057 | 1034 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 1058 | - gen_op_ldub_T0_T0(ctx); | |
| 1035 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1059 | 1036 | tcg_gen_ori_i32(cpu_T[0], cpu_T[0], B7_0); |
| 1060 | - gen_op_stb_T0_T1(ctx); | |
| 1037 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1061 | 1038 | return; |
| 1062 | 1039 | case 0xc300: /* trapa #imm */ |
| 1063 | 1040 | CHECK_NOT_DELAY_SLOT |
| ... | ... | @@ -1073,7 +1050,7 @@ void _decode_opc(DisasContext * ctx) |
| 1073 | 1050 | case 0xcc00: /* tst.b #imm,@(R0,GBR) */ |
| 1074 | 1051 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1075 | 1052 | tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); |
| 1076 | - gen_op_ldub_T0_T0(ctx); | |
| 1053 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1077 | 1054 | tcg_gen_andi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 1078 | 1055 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
| 1079 | 1056 | return; |
| ... | ... | @@ -1084,9 +1061,9 @@ void _decode_opc(DisasContext * ctx) |
| 1084 | 1061 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1085 | 1062 | tcg_gen_add_i32(cpu_T[0], cpu_T[0], cpu_gbr); |
| 1086 | 1063 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 1087 | - gen_op_ldub_T0_T0(ctx); | |
| 1064 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1088 | 1065 | tcg_gen_xori_i32(cpu_T[0], cpu_T[0], B7_0); |
| 1089 | - gen_op_stb_T0_T1(ctx); | |
| 1066 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1090 | 1067 | return; |
| 1091 | 1068 | } |
| 1092 | 1069 | |
| ... | ... | @@ -1097,7 +1074,7 @@ void _decode_opc(DisasContext * ctx) |
| 1097 | 1074 | return; |
| 1098 | 1075 | case 0x4087: /* ldc.l @Rm+,Rn_BANK */ |
| 1099 | 1076 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1100 | - gen_op_ldl_T0_T0(ctx); | |
| 1077 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1101 | 1078 | tcg_gen_mov_i32(cpu_gregs[ALTREG(B6_4)], cpu_T[0]); |
| 1102 | 1079 | tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1103 | 1080 | return; |
| ... | ... | @@ -1110,7 +1087,7 @@ void _decode_opc(DisasContext * ctx) |
| 1110 | 1087 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 1111 | 1088 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); |
| 1112 | 1089 | tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1113 | - gen_op_stl_T0_T1(ctx); | |
| 1090 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1114 | 1091 | tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1115 | 1092 | return; |
| 1116 | 1093 | } |
| ... | ... | @@ -1161,8 +1138,7 @@ void _decode_opc(DisasContext * ctx) |
| 1161 | 1138 | extrald \ |
| 1162 | 1139 | return; \ |
| 1163 | 1140 | case ldpnum: \ |
| 1164 | - tcg_gen_mov_i32 (cpu_T[0], cpu_gregs[REG(B11_8)]); \ | |
| 1165 | - gen_op_ldl_T0_T0 (ctx); \ | |
| 1141 | + tcg_gen_qemu_ld32s (cpu_T[0], cpu_gregs[REG(B11_8)], ctx->memidx); \ | |
| 1166 | 1142 | tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], \ |
| 1167 | 1143 | cpu_gregs[REG(B11_8)], 4); \ |
| 1168 | 1144 | gen_op_##ldop##_T0_##reg (); \ |
| ... | ... | @@ -1174,12 +1150,8 @@ void _decode_opc(DisasContext * ctx) |
| 1174 | 1150 | return; \ |
| 1175 | 1151 | case stpnum: \ |
| 1176 | 1152 | gen_op_##stop##_##reg##_T0 (); \ |
| 1177 | - tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], \ | |
| 1178 | - cpu_gregs[REG(B11_8)], 4); \ | |
| 1179 | - tcg_gen_mov_i32 (cpu_T[1], cpu_gregs[REG(B11_8)]); \ | |
| 1180 | - tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], \ | |
| 1181 | - cpu_gregs[REG(B11_8)], 4); \ | |
| 1182 | - gen_op_stl_T0_T1 (ctx); \ | |
| 1153 | + tcg_gen_subi_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 4); \ | |
| 1154 | + tcg_gen_qemu_st32 (cpu_T[0], cpu_T[1], ctx->memidx); \ | |
| 1183 | 1155 | tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], \ |
| 1184 | 1156 | cpu_gregs[REG(B11_8)], 4); \ |
| 1185 | 1157 | return; |
| ... | ... | @@ -1199,22 +1171,22 @@ void _decode_opc(DisasContext * ctx) |
| 1199 | 1171 | case 0x00c3: /* movca.l R0,@Rm */ |
| 1200 | 1172 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 1201 | 1173 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 1202 | - gen_op_stl_T0_T1(ctx); | |
| 1174 | + tcg_gen_qemu_st32(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1203 | 1175 | return; |
| 1204 | 1176 | case 0x0029: /* movt Rn */ |
| 1205 | 1177 | tcg_gen_andi_i32(cpu_gregs[REG(B11_8)], cpu_sr, SR_T); |
| 1206 | 1178 | return; |
| 1207 | 1179 | case 0x0093: /* ocbi @Rn */ |
| 1208 | 1180 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1209 | - gen_op_ldl_T0_T0(ctx); | |
| 1181 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1210 | 1182 | return; |
| 1211 | 1183 | case 0x00a3: /* ocbp @Rn */ |
| 1212 | 1184 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1213 | - gen_op_ldl_T0_T0(ctx); | |
| 1185 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1214 | 1186 | return; |
| 1215 | 1187 | case 0x00b3: /* ocbwb @Rn */ |
| 1216 | 1188 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1217 | - gen_op_ldl_T0_T0(ctx); | |
| 1189 | + tcg_gen_qemu_ld32s(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1218 | 1190 | return; |
| 1219 | 1191 | case 0x0083: /* pref @Rn */ |
| 1220 | 1192 | return; |
| ... | ... | @@ -1261,10 +1233,10 @@ void _decode_opc(DisasContext * ctx) |
| 1261 | 1233 | case 0x401b: /* tas.b @Rn */ |
| 1262 | 1234 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1263 | 1235 | tcg_gen_mov_i32(cpu_T[1], cpu_T[0]); |
| 1264 | - gen_op_ldub_T0_T0(ctx); | |
| 1236 | + tcg_gen_qemu_ld8u(cpu_T[0], cpu_T[0], ctx->memidx); | |
| 1265 | 1237 | gen_cmp_imm(TCG_COND_EQ, cpu_T[0], 0); |
| 1266 | 1238 | tcg_gen_ori_i32(cpu_T[0], cpu_T[0], 0x80); |
| 1267 | - gen_op_stb_T0_T1(ctx); | |
| 1239 | + tcg_gen_qemu_st8(cpu_T[0], cpu_T[1], ctx->memidx); | |
| 1268 | 1240 | return; |
| 1269 | 1241 | case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ |
| 1270 | 1242 | gen_op_movl_fpul_FT0(); | ... | ... |