Revision 3376f415 target-sh4/translate.c
b/target-sh4/translate.c | ||
---|---|---|
464 | 464 |
{ |
465 | 465 |
TCGv addr = tcg_temp_new(); |
466 | 466 |
tcg_gen_addi_i32(addr, REG(B11_8), B3_0 * 4); |
467 |
tcg_gen_qemu_st32(REG(B7_4), addr, ctx->memidx);
|
|
467 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_TEUL);
|
|
468 | 468 |
tcg_temp_free(addr); |
469 | 469 |
} |
470 | 470 |
return; |
... | ... | |
472 | 472 |
{ |
473 | 473 |
TCGv addr = tcg_temp_new(); |
474 | 474 |
tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 4); |
475 |
tcg_gen_qemu_ld32s(REG(B11_8), addr, ctx->memidx);
|
|
475 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESL);
|
|
476 | 476 |
tcg_temp_free(addr); |
477 | 477 |
} |
478 | 478 |
return; |
... | ... | |
482 | 482 |
case 0x9000: /* mov.w @(disp,PC),Rn */ |
483 | 483 |
{ |
484 | 484 |
TCGv addr = tcg_const_i32(ctx->pc + 4 + B7_0 * 2); |
485 |
tcg_gen_qemu_ld16s(REG(B11_8), addr, ctx->memidx);
|
|
485 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESW);
|
|
486 | 486 |
tcg_temp_free(addr); |
487 | 487 |
} |
488 | 488 |
return; |
489 | 489 |
case 0xd000: /* mov.l @(disp,PC),Rn */ |
490 | 490 |
{ |
491 | 491 |
TCGv addr = tcg_const_i32((ctx->pc + 4 + B7_0 * 4) & ~3); |
492 |
tcg_gen_qemu_ld32s(REG(B11_8), addr, ctx->memidx);
|
|
492 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESL);
|
|
493 | 493 |
tcg_temp_free(addr); |
494 | 494 |
} |
495 | 495 |
return; |
... | ... | |
516 | 516 |
tcg_gen_mov_i32(REG(B11_8), REG(B7_4)); |
517 | 517 |
return; |
518 | 518 |
case 0x2000: /* mov.b Rm,@Rn */ |
519 |
tcg_gen_qemu_st8(REG(B7_4), REG(B11_8), ctx->memidx);
|
|
519 |
tcg_gen_qemu_st_i32(REG(B7_4), REG(B11_8), ctx->memidx, MO_UB);
|
|
520 | 520 |
return; |
521 | 521 |
case 0x2001: /* mov.w Rm,@Rn */ |
522 |
tcg_gen_qemu_st16(REG(B7_4), REG(B11_8), ctx->memidx);
|
|
522 |
tcg_gen_qemu_st_i32(REG(B7_4), REG(B11_8), ctx->memidx, MO_TEUW);
|
|
523 | 523 |
return; |
524 | 524 |
case 0x2002: /* mov.l Rm,@Rn */ |
525 |
tcg_gen_qemu_st32(REG(B7_4), REG(B11_8), ctx->memidx);
|
|
525 |
tcg_gen_qemu_st_i32(REG(B7_4), REG(B11_8), ctx->memidx, MO_TEUL);
|
|
526 | 526 |
return; |
527 | 527 |
case 0x6000: /* mov.b @Rm,Rn */ |
528 |
tcg_gen_qemu_ld8s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
528 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_SB);
|
|
529 | 529 |
return; |
530 | 530 |
case 0x6001: /* mov.w @Rm,Rn */ |
531 |
tcg_gen_qemu_ld16s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
531 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_TESW);
|
|
532 | 532 |
return; |
533 | 533 |
case 0x6002: /* mov.l @Rm,Rn */ |
534 |
tcg_gen_qemu_ld32s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
534 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_TESL);
|
|
535 | 535 |
return; |
536 | 536 |
case 0x2004: /* mov.b Rm,@-Rn */ |
537 | 537 |
{ |
538 | 538 |
TCGv addr = tcg_temp_new(); |
539 | 539 |
tcg_gen_subi_i32(addr, REG(B11_8), 1); |
540 |
tcg_gen_qemu_st8(REG(B7_4), addr, ctx->memidx); /* might cause re-execution */ |
|
540 |
/* might cause re-execution */ |
|
541 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_UB); |
|
541 | 542 |
tcg_gen_mov_i32(REG(B11_8), addr); /* modify register status */ |
542 | 543 |
tcg_temp_free(addr); |
543 | 544 |
} |
... | ... | |
546 | 547 |
{ |
547 | 548 |
TCGv addr = tcg_temp_new(); |
548 | 549 |
tcg_gen_subi_i32(addr, REG(B11_8), 2); |
549 |
tcg_gen_qemu_st16(REG(B7_4), addr, ctx->memidx);
|
|
550 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_TEUW);
|
|
550 | 551 |
tcg_gen_mov_i32(REG(B11_8), addr); |
551 | 552 |
tcg_temp_free(addr); |
552 | 553 |
} |
... | ... | |
555 | 556 |
{ |
556 | 557 |
TCGv addr = tcg_temp_new(); |
557 | 558 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
558 |
tcg_gen_qemu_st32(REG(B7_4), addr, ctx->memidx);
|
|
559 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_TEUL);
|
|
559 | 560 |
tcg_gen_mov_i32(REG(B11_8), addr); |
560 | 561 |
} |
561 | 562 |
return; |
562 | 563 |
case 0x6004: /* mov.b @Rm+,Rn */ |
563 |
tcg_gen_qemu_ld8s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
564 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_SB);
|
|
564 | 565 |
if ( B11_8 != B7_4 ) |
565 | 566 |
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 1); |
566 | 567 |
return; |
567 | 568 |
case 0x6005: /* mov.w @Rm+,Rn */ |
568 |
tcg_gen_qemu_ld16s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
569 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_TESW);
|
|
569 | 570 |
if ( B11_8 != B7_4 ) |
570 | 571 |
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 2); |
571 | 572 |
return; |
572 | 573 |
case 0x6006: /* mov.l @Rm+,Rn */ |
573 |
tcg_gen_qemu_ld32s(REG(B11_8), REG(B7_4), ctx->memidx);
|
|
574 |
tcg_gen_qemu_ld_i32(REG(B11_8), REG(B7_4), ctx->memidx, MO_TESL);
|
|
574 | 575 |
if ( B11_8 != B7_4 ) |
575 | 576 |
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); |
576 | 577 |
return; |
... | ... | |
578 | 579 |
{ |
579 | 580 |
TCGv addr = tcg_temp_new(); |
580 | 581 |
tcg_gen_add_i32(addr, REG(B11_8), REG(0)); |
581 |
tcg_gen_qemu_st8(REG(B7_4), addr, ctx->memidx);
|
|
582 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_UB);
|
|
582 | 583 |
tcg_temp_free(addr); |
583 | 584 |
} |
584 | 585 |
return; |
... | ... | |
586 | 587 |
{ |
587 | 588 |
TCGv addr = tcg_temp_new(); |
588 | 589 |
tcg_gen_add_i32(addr, REG(B11_8), REG(0)); |
589 |
tcg_gen_qemu_st16(REG(B7_4), addr, ctx->memidx);
|
|
590 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_TEUW);
|
|
590 | 591 |
tcg_temp_free(addr); |
591 | 592 |
} |
592 | 593 |
return; |
... | ... | |
594 | 595 |
{ |
595 | 596 |
TCGv addr = tcg_temp_new(); |
596 | 597 |
tcg_gen_add_i32(addr, REG(B11_8), REG(0)); |
597 |
tcg_gen_qemu_st32(REG(B7_4), addr, ctx->memidx);
|
|
598 |
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_TEUL);
|
|
598 | 599 |
tcg_temp_free(addr); |
599 | 600 |
} |
600 | 601 |
return; |
... | ... | |
602 | 603 |
{ |
603 | 604 |
TCGv addr = tcg_temp_new(); |
604 | 605 |
tcg_gen_add_i32(addr, REG(B7_4), REG(0)); |
605 |
tcg_gen_qemu_ld8s(REG(B11_8), addr, ctx->memidx);
|
|
606 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_SB);
|
|
606 | 607 |
tcg_temp_free(addr); |
607 | 608 |
} |
608 | 609 |
return; |
... | ... | |
610 | 611 |
{ |
611 | 612 |
TCGv addr = tcg_temp_new(); |
612 | 613 |
tcg_gen_add_i32(addr, REG(B7_4), REG(0)); |
613 |
tcg_gen_qemu_ld16s(REG(B11_8), addr, ctx->memidx);
|
|
614 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESW);
|
|
614 | 615 |
tcg_temp_free(addr); |
615 | 616 |
} |
616 | 617 |
return; |
... | ... | |
618 | 619 |
{ |
619 | 620 |
TCGv addr = tcg_temp_new(); |
620 | 621 |
tcg_gen_add_i32(addr, REG(B7_4), REG(0)); |
621 |
tcg_gen_qemu_ld32s(REG(B11_8), addr, ctx->memidx);
|
|
622 |
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESL);
|
|
622 | 623 |
tcg_temp_free(addr); |
623 | 624 |
} |
624 | 625 |
return; |
... | ... | |
767 | 768 |
{ |
768 | 769 |
TCGv arg0, arg1; |
769 | 770 |
arg0 = tcg_temp_new(); |
770 |
tcg_gen_qemu_ld32s(arg0, REG(B7_4), ctx->memidx);
|
|
771 |
tcg_gen_qemu_ld_i32(arg0, REG(B7_4), ctx->memidx, MO_TESL);
|
|
771 | 772 |
arg1 = tcg_temp_new(); |
772 |
tcg_gen_qemu_ld32s(arg1, REG(B11_8), ctx->memidx);
|
|
773 |
tcg_gen_qemu_ld_i32(arg1, REG(B11_8), ctx->memidx, MO_TESL);
|
|
773 | 774 |
gen_helper_macl(cpu_env, arg0, arg1); |
774 | 775 |
tcg_temp_free(arg1); |
775 | 776 |
tcg_temp_free(arg0); |
... | ... | |
781 | 782 |
{ |
782 | 783 |
TCGv arg0, arg1; |
783 | 784 |
arg0 = tcg_temp_new(); |
784 |
tcg_gen_qemu_ld32s(arg0, REG(B7_4), ctx->memidx);
|
|
785 |
tcg_gen_qemu_ld_i32(arg0, REG(B7_4), ctx->memidx, MO_TESL);
|
|
785 | 786 |
arg1 = tcg_temp_new(); |
786 |
tcg_gen_qemu_ld32s(arg1, REG(B11_8), ctx->memidx);
|
|
787 |
tcg_gen_qemu_ld_i32(arg1, REG(B11_8), ctx->memidx, MO_TESL);
|
|
787 | 788 |
gen_helper_macw(cpu_env, arg0, arg1); |
788 | 789 |
tcg_temp_free(arg1); |
789 | 790 |
tcg_temp_free(arg0); |
... | ... | |
979 | 980 |
TCGv addr_hi = tcg_temp_new(); |
980 | 981 |
int fr = XREG(B7_4); |
981 | 982 |
tcg_gen_addi_i32(addr_hi, REG(B11_8), 4); |
982 |
tcg_gen_qemu_st32(cpu_fregs[fr ], REG(B11_8), ctx->memidx); |
|
983 |
tcg_gen_qemu_st32(cpu_fregs[fr+1], addr_hi, ctx->memidx); |
|
983 |
tcg_gen_qemu_st_i32(cpu_fregs[fr], REG(B11_8), |
|
984 |
ctx->memidx, MO_TEUL); |
|
985 |
tcg_gen_qemu_st_i32(cpu_fregs[fr+1], addr_hi, |
|
986 |
ctx->memidx, MO_TEUL); |
|
984 | 987 |
tcg_temp_free(addr_hi); |
985 | 988 |
} else { |
986 |
tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], REG(B11_8), ctx->memidx); |
|
989 |
tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], REG(B11_8), |
|
990 |
ctx->memidx, MO_TEUL); |
|
987 | 991 |
} |
988 | 992 |
return; |
989 | 993 |
case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ |
... | ... | |
992 | 996 |
TCGv addr_hi = tcg_temp_new(); |
993 | 997 |
int fr = XREG(B11_8); |
994 | 998 |
tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); |
995 |
tcg_gen_qemu_ld32u(cpu_fregs[fr ], REG(B7_4), ctx->memidx);
|
|
996 |
tcg_gen_qemu_ld32u(cpu_fregs[fr+1], addr_hi, ctx->memidx);
|
|
999 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr], REG(B7_4), ctx->memidx, MO_TEUL);
|
|
1000 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr_hi, ctx->memidx, MO_TEUL);
|
|
997 | 1001 |
tcg_temp_free(addr_hi); |
998 | 1002 |
} else { |
999 |
tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], REG(B7_4), ctx->memidx); |
|
1003 |
tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], REG(B7_4), |
|
1004 |
ctx->memidx, MO_TEUL); |
|
1000 | 1005 |
} |
1001 | 1006 |
return; |
1002 | 1007 |
case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ |
... | ... | |
1005 | 1010 |
TCGv addr_hi = tcg_temp_new(); |
1006 | 1011 |
int fr = XREG(B11_8); |
1007 | 1012 |
tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); |
1008 |
tcg_gen_qemu_ld32u(cpu_fregs[fr ], REG(B7_4), ctx->memidx);
|
|
1009 |
tcg_gen_qemu_ld32u(cpu_fregs[fr+1], addr_hi, ctx->memidx);
|
|
1013 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr], REG(B7_4), ctx->memidx, MO_TEUL);
|
|
1014 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr_hi, ctx->memidx, MO_TEUL);
|
|
1010 | 1015 |
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 8); |
1011 | 1016 |
tcg_temp_free(addr_hi); |
1012 | 1017 |
} else { |
1013 |
tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], REG(B7_4), ctx->memidx); |
|
1018 |
tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], REG(B7_4), |
|
1019 |
ctx->memidx, MO_TEUL); |
|
1014 | 1020 |
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); |
1015 | 1021 |
} |
1016 | 1022 |
return; |
... | ... | |
1020 | 1026 |
TCGv addr = tcg_temp_new_i32(); |
1021 | 1027 |
int fr = XREG(B7_4); |
1022 | 1028 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
1023 |
tcg_gen_qemu_st32(cpu_fregs[fr+1], addr, ctx->memidx);
|
|
1029 |
tcg_gen_qemu_st_i32(cpu_fregs[fr+1], addr, ctx->memidx, MO_TEUL);
|
|
1024 | 1030 |
tcg_gen_subi_i32(addr, addr, 4); |
1025 |
tcg_gen_qemu_st32(cpu_fregs[fr ], addr, ctx->memidx);
|
|
1031 |
tcg_gen_qemu_st_i32(cpu_fregs[fr], addr, ctx->memidx, MO_TEUL);
|
|
1026 | 1032 |
tcg_gen_mov_i32(REG(B11_8), addr); |
1027 | 1033 |
tcg_temp_free(addr); |
1028 | 1034 |
} else { |
1029 | 1035 |
TCGv addr; |
1030 | 1036 |
addr = tcg_temp_new_i32(); |
1031 | 1037 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
1032 |
tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], addr, ctx->memidx); |
|
1038 |
tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], addr, |
|
1039 |
ctx->memidx, MO_TEUL); |
|
1033 | 1040 |
tcg_gen_mov_i32(REG(B11_8), addr); |
1034 | 1041 |
tcg_temp_free(addr); |
1035 | 1042 |
} |
... | ... | |
1041 | 1048 |
tcg_gen_add_i32(addr, REG(B7_4), REG(0)); |
1042 | 1049 |
if (ctx->flags & FPSCR_SZ) { |
1043 | 1050 |
int fr = XREG(B11_8); |
1044 |
tcg_gen_qemu_ld32u(cpu_fregs[fr ], addr, ctx->memidx); |
|
1051 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr], addr, |
|
1052 |
ctx->memidx, MO_TEUL); |
|
1045 | 1053 |
tcg_gen_addi_i32(addr, addr, 4); |
1046 |
tcg_gen_qemu_ld32u(cpu_fregs[fr+1], addr, ctx->memidx); |
|
1054 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr, |
|
1055 |
ctx->memidx, MO_TEUL); |
|
1047 | 1056 |
} else { |
1048 |
tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], addr, ctx->memidx); |
|
1057 |
tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], addr, |
|
1058 |
ctx->memidx, MO_TEUL); |
|
1049 | 1059 |
} |
1050 | 1060 |
tcg_temp_free(addr); |
1051 | 1061 |
} |
... | ... | |
1057 | 1067 |
tcg_gen_add_i32(addr, REG(B11_8), REG(0)); |
1058 | 1068 |
if (ctx->flags & FPSCR_SZ) { |
1059 | 1069 |
int fr = XREG(B7_4); |
1060 |
tcg_gen_qemu_ld32u(cpu_fregs[fr ], addr, ctx->memidx); |
|
1070 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr], addr, |
|
1071 |
ctx->memidx, MO_TEUL); |
|
1061 | 1072 |
tcg_gen_addi_i32(addr, addr, 4); |
1062 |
tcg_gen_qemu_ld32u(cpu_fregs[fr+1], addr, ctx->memidx); |
|
1073 |
tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr, |
|
1074 |
ctx->memidx, MO_TEUL); |
|
1063 | 1075 |
} else { |
1064 |
tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], addr, ctx->memidx); |
|
1076 |
tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], addr, |
|
1077 |
ctx->memidx, MO_TEUL); |
|
1065 | 1078 |
} |
1066 | 1079 |
tcg_temp_free(addr); |
1067 | 1080 |
} |
... | ... | |
1164 | 1177 |
addr = tcg_temp_new(); |
1165 | 1178 |
tcg_gen_add_i32(addr, REG(0), cpu_gbr); |
1166 | 1179 |
val = tcg_temp_new(); |
1167 |
tcg_gen_qemu_ld8u(val, addr, ctx->memidx);
|
|
1180 |
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
|
|
1168 | 1181 |
tcg_gen_andi_i32(val, val, B7_0); |
1169 |
tcg_gen_qemu_st8(val, addr, ctx->memidx);
|
|
1182 |
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
|
|
1170 | 1183 |
tcg_temp_free(val); |
1171 | 1184 |
tcg_temp_free(addr); |
1172 | 1185 |
} |
... | ... | |
1200 | 1213 |
{ |
1201 | 1214 |
TCGv addr = tcg_temp_new(); |
1202 | 1215 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0); |
1203 |
tcg_gen_qemu_ld8s(REG(0), addr, ctx->memidx);
|
|
1216 |
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_SB);
|
|
1204 | 1217 |
tcg_temp_free(addr); |
1205 | 1218 |
} |
1206 | 1219 |
return; |
... | ... | |
1208 | 1221 |
{ |
1209 | 1222 |
TCGv addr = tcg_temp_new(); |
1210 | 1223 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 2); |
1211 |
tcg_gen_qemu_ld16s(REG(0), addr, ctx->memidx);
|
|
1224 |
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_TESW);
|
|
1212 | 1225 |
tcg_temp_free(addr); |
1213 | 1226 |
} |
1214 | 1227 |
return; |
... | ... | |
1216 | 1229 |
{ |
1217 | 1230 |
TCGv addr = tcg_temp_new(); |
1218 | 1231 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 4); |
1219 |
tcg_gen_qemu_ld32s(REG(0), addr, ctx->memidx);
|
|
1232 |
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_TESL);
|
|
1220 | 1233 |
tcg_temp_free(addr); |
1221 | 1234 |
} |
1222 | 1235 |
return; |
... | ... | |
1224 | 1237 |
{ |
1225 | 1238 |
TCGv addr = tcg_temp_new(); |
1226 | 1239 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0); |
1227 |
tcg_gen_qemu_st8(REG(0), addr, ctx->memidx);
|
|
1240 |
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_UB);
|
|
1228 | 1241 |
tcg_temp_free(addr); |
1229 | 1242 |
} |
1230 | 1243 |
return; |
... | ... | |
1232 | 1245 |
{ |
1233 | 1246 |
TCGv addr = tcg_temp_new(); |
1234 | 1247 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 2); |
1235 |
tcg_gen_qemu_st16(REG(0), addr, ctx->memidx);
|
|
1248 |
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_TEUW);
|
|
1236 | 1249 |
tcg_temp_free(addr); |
1237 | 1250 |
} |
1238 | 1251 |
return; |
... | ... | |
1240 | 1253 |
{ |
1241 | 1254 |
TCGv addr = tcg_temp_new(); |
1242 | 1255 |
tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 4); |
1243 |
tcg_gen_qemu_st32(REG(0), addr, ctx->memidx);
|
|
1256 |
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_TEUL);
|
|
1244 | 1257 |
tcg_temp_free(addr); |
1245 | 1258 |
} |
1246 | 1259 |
return; |
... | ... | |
1248 | 1261 |
{ |
1249 | 1262 |
TCGv addr = tcg_temp_new(); |
1250 | 1263 |
tcg_gen_addi_i32(addr, REG(B7_4), B3_0); |
1251 |
tcg_gen_qemu_st8(REG(0), addr, ctx->memidx);
|
|
1264 |
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_UB);
|
|
1252 | 1265 |
tcg_temp_free(addr); |
1253 | 1266 |
} |
1254 | 1267 |
return; |
... | ... | |
1256 | 1269 |
{ |
1257 | 1270 |
TCGv addr = tcg_temp_new(); |
1258 | 1271 |
tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 2); |
1259 |
tcg_gen_qemu_st16(REG(0), addr, ctx->memidx);
|
|
1272 |
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_TEUW);
|
|
1260 | 1273 |
tcg_temp_free(addr); |
1261 | 1274 |
} |
1262 | 1275 |
return; |
... | ... | |
1264 | 1277 |
{ |
1265 | 1278 |
TCGv addr = tcg_temp_new(); |
1266 | 1279 |
tcg_gen_addi_i32(addr, REG(B7_4), B3_0); |
1267 |
tcg_gen_qemu_ld8s(REG(0), addr, ctx->memidx);
|
|
1280 |
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_SB);
|
|
1268 | 1281 |
tcg_temp_free(addr); |
1269 | 1282 |
} |
1270 | 1283 |
return; |
... | ... | |
1272 | 1285 |
{ |
1273 | 1286 |
TCGv addr = tcg_temp_new(); |
1274 | 1287 |
tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 2); |
1275 |
tcg_gen_qemu_ld16s(REG(0), addr, ctx->memidx);
|
|
1288 |
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_TESW);
|
|
1276 | 1289 |
tcg_temp_free(addr); |
1277 | 1290 |
} |
1278 | 1291 |
return; |
... | ... | |
1288 | 1301 |
addr = tcg_temp_new(); |
1289 | 1302 |
tcg_gen_add_i32(addr, REG(0), cpu_gbr); |
1290 | 1303 |
val = tcg_temp_new(); |
1291 |
tcg_gen_qemu_ld8u(val, addr, ctx->memidx);
|
|
1304 |
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
|
|
1292 | 1305 |
tcg_gen_ori_i32(val, val, B7_0); |
1293 |
tcg_gen_qemu_st8(val, addr, ctx->memidx);
|
|
1306 |
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
|
|
1294 | 1307 |
tcg_temp_free(val); |
1295 | 1308 |
tcg_temp_free(addr); |
1296 | 1309 |
} |
... | ... | |
1318 | 1331 |
{ |
1319 | 1332 |
TCGv val = tcg_temp_new(); |
1320 | 1333 |
tcg_gen_add_i32(val, REG(0), cpu_gbr); |
1321 |
tcg_gen_qemu_ld8u(val, val, ctx->memidx);
|
|
1334 |
tcg_gen_qemu_ld_i32(val, val, ctx->memidx, MO_UB);
|
|
1322 | 1335 |
tcg_gen_andi_i32(val, val, B7_0); |
1323 | 1336 |
gen_cmp_imm(TCG_COND_EQ, val, 0); |
1324 | 1337 |
tcg_temp_free(val); |
... | ... | |
1333 | 1346 |
addr = tcg_temp_new(); |
1334 | 1347 |
tcg_gen_add_i32(addr, REG(0), cpu_gbr); |
1335 | 1348 |
val = tcg_temp_new(); |
1336 |
tcg_gen_qemu_ld8u(val, addr, ctx->memidx);
|
|
1349 |
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
|
|
1337 | 1350 |
tcg_gen_xori_i32(val, val, B7_0); |
1338 |
tcg_gen_qemu_st8(val, addr, ctx->memidx);
|
|
1351 |
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
|
|
1339 | 1352 |
tcg_temp_free(val); |
1340 | 1353 |
tcg_temp_free(addr); |
1341 | 1354 |
} |
... | ... | |
1349 | 1362 |
return; |
1350 | 1363 |
case 0x4087: /* ldc.l @Rm+,Rn_BANK */ |
1351 | 1364 |
CHECK_PRIVILEGED |
1352 |
tcg_gen_qemu_ld32s(ALTREG(B6_4), REG(B11_8), ctx->memidx);
|
|
1365 |
tcg_gen_qemu_ld_i32(ALTREG(B6_4), REG(B11_8), ctx->memidx, MO_TESL);
|
|
1353 | 1366 |
tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); |
1354 | 1367 |
return; |
1355 | 1368 |
case 0x0082: /* stc Rm_BANK,Rn */ |
... | ... | |
1361 | 1374 |
{ |
1362 | 1375 |
TCGv addr = tcg_temp_new(); |
1363 | 1376 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
1364 |
tcg_gen_qemu_st32(ALTREG(B6_4), addr, ctx->memidx);
|
|
1377 |
tcg_gen_qemu_st_i32(ALTREG(B6_4), addr, ctx->memidx, MO_TEUL);
|
|
1365 | 1378 |
tcg_gen_mov_i32(REG(B11_8), addr); |
1366 | 1379 |
tcg_temp_free(addr); |
1367 | 1380 |
} |
... | ... | |
1414 | 1427 |
CHECK_PRIVILEGED |
1415 | 1428 |
{ |
1416 | 1429 |
TCGv val = tcg_temp_new(); |
1417 |
tcg_gen_qemu_ld32s(val, REG(B11_8), ctx->memidx);
|
|
1430 |
tcg_gen_qemu_ld_i32(val, REG(B11_8), ctx->memidx, MO_TESL);
|
|
1418 | 1431 |
tcg_gen_andi_i32(cpu_sr, val, 0x700083f3); |
1419 | 1432 |
tcg_temp_free(val); |
1420 | 1433 |
tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); |
... | ... | |
1430 | 1443 |
{ |
1431 | 1444 |
TCGv addr = tcg_temp_new(); |
1432 | 1445 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
1433 |
tcg_gen_qemu_st32(cpu_sr, addr, ctx->memidx);
|
|
1446 |
tcg_gen_qemu_st_i32(cpu_sr, addr, ctx->memidx, MO_TEUL);
|
|
1434 | 1447 |
tcg_gen_mov_i32(REG(B11_8), addr); |
1435 | 1448 |
tcg_temp_free(addr); |
1436 | 1449 |
} |
... | ... | |
1442 | 1455 |
return; \ |
1443 | 1456 |
case ldpnum: \ |
1444 | 1457 |
prechk \ |
1445 |
tcg_gen_qemu_ld32s (cpu_##reg, REG(B11_8), ctx->memidx); \
|
|
1458 |
tcg_gen_qemu_ld_i32(cpu_##reg, REG(B11_8), ctx->memidx, MO_TESL); \
|
|
1446 | 1459 |
tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); \ |
1447 | 1460 |
return; |
1448 | 1461 |
#define ST(reg,stnum,stpnum,prechk) \ |
... | ... | |
1455 | 1468 |
{ \ |
1456 | 1469 |
TCGv addr = tcg_temp_new(); \ |
1457 | 1470 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); \ |
1458 |
tcg_gen_qemu_st32 (cpu_##reg, addr, ctx->memidx); \
|
|
1471 |
tcg_gen_qemu_st_i32(cpu_##reg, addr, ctx->memidx, MO_TEUL); \
|
|
1459 | 1472 |
tcg_gen_mov_i32(REG(B11_8), addr); \ |
1460 | 1473 |
tcg_temp_free(addr); \ |
1461 | 1474 |
} \ |
... | ... | |
1483 | 1496 |
CHECK_FPU_ENABLED |
1484 | 1497 |
{ |
1485 | 1498 |
TCGv addr = tcg_temp_new(); |
1486 |
tcg_gen_qemu_ld32s(addr, REG(B11_8), ctx->memidx);
|
|
1499 |
tcg_gen_qemu_ld_i32(addr, REG(B11_8), ctx->memidx, MO_TESL);
|
|
1487 | 1500 |
tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); |
1488 | 1501 |
gen_helper_ld_fpscr(cpu_env, addr); |
1489 | 1502 |
tcg_temp_free(addr); |
... | ... | |
1502 | 1515 |
tcg_gen_andi_i32(val, cpu_fpscr, 0x003fffff); |
1503 | 1516 |
addr = tcg_temp_new(); |
1504 | 1517 |
tcg_gen_subi_i32(addr, REG(B11_8), 4); |
1505 |
tcg_gen_qemu_st32(val, addr, ctx->memidx);
|
|
1518 |
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_TEUL);
|
|
1506 | 1519 |
tcg_gen_mov_i32(REG(B11_8), addr); |
1507 | 1520 |
tcg_temp_free(addr); |
1508 | 1521 |
tcg_temp_free(val); |
... | ... | |
1511 | 1524 |
case 0x00c3: /* movca.l R0,@Rm */ |
1512 | 1525 |
{ |
1513 | 1526 |
TCGv val = tcg_temp_new(); |
1514 |
tcg_gen_qemu_ld32u(val, REG(B11_8), ctx->memidx);
|
|
1527 |
tcg_gen_qemu_ld_i32(val, REG(B11_8), ctx->memidx, MO_TEUL);
|
|
1515 | 1528 |
gen_helper_movcal(cpu_env, REG(B11_8), val); |
1516 |
tcg_gen_qemu_st32(REG(0), REG(B11_8), ctx->memidx);
|
|
1529 |
tcg_gen_qemu_st_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
|
|
1517 | 1530 |
} |
1518 | 1531 |
ctx->has_movcal = 1; |
1519 | 1532 |
return; |
1520 | 1533 |
case 0x40a9: |
1521 | 1534 |
/* MOVUA.L @Rm,R0 (Rm) -> R0 |
1522 | 1535 |
Load non-boundary-aligned data */ |
1523 |
tcg_gen_qemu_ld32u(REG(0), REG(B11_8), ctx->memidx);
|
|
1536 |
tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
|
|
1524 | 1537 |
return; |
1525 | 1538 |
case 0x40e9: |
1526 | 1539 |
/* MOVUA.L @Rm+,R0 (Rm) -> R0, Rm + 4 -> Rm |
1527 | 1540 |
Load non-boundary-aligned data */ |
1528 |
tcg_gen_qemu_ld32u(REG(0), REG(B11_8), ctx->memidx);
|
|
1541 |
tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
|
|
1529 | 1542 |
tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); |
1530 | 1543 |
return; |
1531 | 1544 |
case 0x0029: /* movt Rn */ |
... | ... | |
1542 | 1555 |
tcg_gen_andi_i32(cpu_sr, cpu_sr, ~SR_T); |
1543 | 1556 |
tcg_gen_or_i32(cpu_sr, cpu_sr, cpu_ldst); |
1544 | 1557 |
tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_ldst, 0, label); |
1545 |
tcg_gen_qemu_st32(REG(0), REG(B11_8), ctx->memidx);
|
|
1558 |
tcg_gen_qemu_st_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
|
|
1546 | 1559 |
gen_set_label(label); |
1547 | 1560 |
tcg_gen_movi_i32(cpu_ldst, 0); |
1548 | 1561 |
return; |
... | ... | |
1557 | 1570 |
*/ |
1558 | 1571 |
if (ctx->features & SH_FEATURE_SH4A) { |
1559 | 1572 |
tcg_gen_movi_i32(cpu_ldst, 0); |
1560 |
tcg_gen_qemu_ld32s(REG(0), REG(B11_8), ctx->memidx);
|
|
1573 |
tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL);
|
|
1561 | 1574 |
tcg_gen_movi_i32(cpu_ldst, 1); |
1562 | 1575 |
return; |
1563 | 1576 |
} else |
... | ... | |
1655 | 1668 |
addr = tcg_temp_local_new(); |
1656 | 1669 |
tcg_gen_mov_i32(addr, REG(B11_8)); |
1657 | 1670 |
val = tcg_temp_local_new(); |
1658 |
tcg_gen_qemu_ld8u(val, addr, ctx->memidx);
|
|
1671 |
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
|
|
1659 | 1672 |
gen_cmp_imm(TCG_COND_EQ, val, 0); |
1660 | 1673 |
tcg_gen_ori_i32(val, val, 0x80); |
1661 |
tcg_gen_qemu_st8(val, addr, ctx->memidx);
|
|
1674 |
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
|
|
1662 | 1675 |
tcg_temp_free(val); |
1663 | 1676 |
tcg_temp_free(addr); |
1664 | 1677 |
} |
Also available in: Unified diff