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(); | ... | ... |