Commit 559dd74de8880b05ac9b3da2228f982aafa8f580
1 parent
1e8864f7
SH4: convert logic and arithmetic ops to TCG
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5103 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
111 additions
and
317 deletions
target-sh4/op.c
| @@ -43,12 +43,6 @@ void OPPROTO op_cmp_eq_imm_T0(void) | @@ -43,12 +43,6 @@ void OPPROTO op_cmp_eq_imm_T0(void) | ||
| 43 | RETURN(); | 43 | RETURN(); |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | -void OPPROTO op_not_T0(void) | ||
| 47 | -{ | ||
| 48 | - T0 = ~T0; | ||
| 49 | - RETURN(); | ||
| 50 | -} | ||
| 51 | - | ||
| 52 | void OPPROTO op_bf_s(void) | 46 | void OPPROTO op_bf_s(void) |
| 53 | { | 47 | { |
| 54 | env->delayed_pc = PARAM1; | 48 | env->delayed_pc = PARAM1; |
| @@ -113,18 +107,6 @@ void OPPROTO op_rts(void) | @@ -113,18 +107,6 @@ void OPPROTO op_rts(void) | ||
| 113 | RETURN(); | 107 | RETURN(); |
| 114 | } | 108 | } |
| 115 | 109 | ||
| 116 | -void OPPROTO op_addl_imm_T0(void) | ||
| 117 | -{ | ||
| 118 | - T0 += PARAM1; | ||
| 119 | - RETURN(); | ||
| 120 | -} | ||
| 121 | - | ||
| 122 | -void OPPROTO op_addl_imm_T1(void) | ||
| 123 | -{ | ||
| 124 | - T1 += PARAM1; | ||
| 125 | - RETURN(); | ||
| 126 | -} | ||
| 127 | - | ||
| 128 | void OPPROTO op_clrmac(void) | 110 | void OPPROTO op_clrmac(void) |
| 129 | { | 111 | { |
| 130 | env->mach = env->macl = 0; | 112 | env->mach = env->macl = 0; |
| @@ -180,30 +162,6 @@ void OPPROTO op_rte(void) | @@ -180,30 +162,6 @@ void OPPROTO op_rte(void) | ||
| 180 | RETURN(); | 162 | RETURN(); |
| 181 | } | 163 | } |
| 182 | 164 | ||
| 183 | -void OPPROTO op_swapb_T0(void) | ||
| 184 | -{ | ||
| 185 | - T0 = (T0 & 0xffff0000) | ((T0 & 0xff) << 8) | ((T0 >> 8) & 0xff); | ||
| 186 | - RETURN(); | ||
| 187 | -} | ||
| 188 | - | ||
| 189 | -void OPPROTO op_swapw_T0(void) | ||
| 190 | -{ | ||
| 191 | - T0 = ((T0 & 0xffff) << 16) | ((T0 >> 16) & 0xffff); | ||
| 192 | - RETURN(); | ||
| 193 | -} | ||
| 194 | - | ||
| 195 | -void OPPROTO op_xtrct_T0_T1(void) | ||
| 196 | -{ | ||
| 197 | - T1 = ((T0 & 0xffff) << 16) | ((T1 >> 16) & 0xffff); | ||
| 198 | - RETURN(); | ||
| 199 | -} | ||
| 200 | - | ||
| 201 | -void OPPROTO op_add_T0_T1(void) | ||
| 202 | -{ | ||
| 203 | - T1 += T0; | ||
| 204 | - RETURN(); | ||
| 205 | -} | ||
| 206 | - | ||
| 207 | void OPPROTO op_addc_T0_T1(void) | 165 | void OPPROTO op_addc_T0_T1(void) |
| 208 | { | 166 | { |
| 209 | helper_addc_T0_T1(); | 167 | helper_addc_T0_T1(); |
| @@ -329,12 +287,6 @@ void OPPROTO op_muluw_T0_T1(void) | @@ -329,12 +287,6 @@ void OPPROTO op_muluw_T0_T1(void) | ||
| 329 | RETURN(); | 287 | RETURN(); |
| 330 | } | 288 | } |
| 331 | 289 | ||
| 332 | -void OPPROTO op_neg_T0(void) | ||
| 333 | -{ | ||
| 334 | - T0 = -T0; | ||
| 335 | - RETURN(); | ||
| 336 | -} | ||
| 337 | - | ||
| 338 | void OPPROTO op_negc_T0(void) | 290 | void OPPROTO op_negc_T0(void) |
| 339 | { | 291 | { |
| 340 | helper_negc_T0(); | 292 | helper_negc_T0(); |
| @@ -508,42 +460,6 @@ void OPPROTO op_shlr_Rn(void) | @@ -508,42 +460,6 @@ void OPPROTO op_shlr_Rn(void) | ||
| 508 | RETURN(); | 460 | RETURN(); |
| 509 | } | 461 | } |
| 510 | 462 | ||
| 511 | -void OPPROTO op_shll2_Rn(void) | ||
| 512 | -{ | ||
| 513 | - env->gregs[PARAM1] <<= 2; | ||
| 514 | - RETURN(); | ||
| 515 | -} | ||
| 516 | - | ||
| 517 | -void OPPROTO op_shll8_Rn(void) | ||
| 518 | -{ | ||
| 519 | - env->gregs[PARAM1] <<= 8; | ||
| 520 | - RETURN(); | ||
| 521 | -} | ||
| 522 | - | ||
| 523 | -void OPPROTO op_shll16_Rn(void) | ||
| 524 | -{ | ||
| 525 | - env->gregs[PARAM1] <<= 16; | ||
| 526 | - RETURN(); | ||
| 527 | -} | ||
| 528 | - | ||
| 529 | -void OPPROTO op_shlr2_Rn(void) | ||
| 530 | -{ | ||
| 531 | - env->gregs[PARAM1] >>= 2; | ||
| 532 | - RETURN(); | ||
| 533 | -} | ||
| 534 | - | ||
| 535 | -void OPPROTO op_shlr8_Rn(void) | ||
| 536 | -{ | ||
| 537 | - env->gregs[PARAM1] >>= 8; | ||
| 538 | - RETURN(); | ||
| 539 | -} | ||
| 540 | - | ||
| 541 | -void OPPROTO op_shlr16_Rn(void) | ||
| 542 | -{ | ||
| 543 | - env->gregs[PARAM1] >>= 16; | ||
| 544 | - RETURN(); | ||
| 545 | -} | ||
| 546 | - | ||
| 547 | void OPPROTO op_fmov_frN_FT0(void) | 463 | void OPPROTO op_fmov_frN_FT0(void) |
| 548 | { | 464 | { |
| 549 | FT0 = env->fregs[PARAM1]; | 465 | FT0 = env->fregs[PARAM1]; |
| @@ -736,120 +652,6 @@ void OPPROTO op_fmov_T0_frN(void) | @@ -736,120 +652,6 @@ void OPPROTO op_fmov_T0_frN(void) | ||
| 736 | RETURN(); | 652 | RETURN(); |
| 737 | } | 653 | } |
| 738 | 654 | ||
| 739 | -void OPPROTO op_dec1_rN(void) | ||
| 740 | -{ | ||
| 741 | - env->gregs[PARAM1] -= 1; | ||
| 742 | - RETURN(); | ||
| 743 | -} | ||
| 744 | - | ||
| 745 | -void OPPROTO op_dec2_rN(void) | ||
| 746 | -{ | ||
| 747 | - env->gregs[PARAM1] -= 2; | ||
| 748 | - RETURN(); | ||
| 749 | -} | ||
| 750 | - | ||
| 751 | -void OPPROTO op_dec4_rN(void) | ||
| 752 | -{ | ||
| 753 | - env->gregs[PARAM1] -= 4; | ||
| 754 | - RETURN(); | ||
| 755 | -} | ||
| 756 | - | ||
| 757 | -void OPPROTO op_dec8_rN(void) | ||
| 758 | -{ | ||
| 759 | - env->gregs[PARAM1] -= 8; | ||
| 760 | - RETURN(); | ||
| 761 | -} | ||
| 762 | - | ||
| 763 | -void OPPROTO op_inc1_rN(void) | ||
| 764 | -{ | ||
| 765 | - env->gregs[PARAM1] += 1; | ||
| 766 | - RETURN(); | ||
| 767 | -} | ||
| 768 | - | ||
| 769 | -void OPPROTO op_inc2_rN(void) | ||
| 770 | -{ | ||
| 771 | - env->gregs[PARAM1] += 2; | ||
| 772 | - RETURN(); | ||
| 773 | -} | ||
| 774 | - | ||
| 775 | -void OPPROTO op_inc4_rN(void) | ||
| 776 | -{ | ||
| 777 | - env->gregs[PARAM1] += 4; | ||
| 778 | - RETURN(); | ||
| 779 | -} | ||
| 780 | - | ||
| 781 | -void OPPROTO op_inc8_rN(void) | ||
| 782 | -{ | ||
| 783 | - env->gregs[PARAM1] += 8; | ||
| 784 | - RETURN(); | ||
| 785 | -} | ||
| 786 | - | ||
| 787 | -void OPPROTO op_add_T0_rN(void) | ||
| 788 | -{ | ||
| 789 | - env->gregs[PARAM1] += T0; | ||
| 790 | - RETURN(); | ||
| 791 | -} | ||
| 792 | - | ||
| 793 | -void OPPROTO op_sub_T0_rN(void) | ||
| 794 | -{ | ||
| 795 | - env->gregs[PARAM1] -= T0; | ||
| 796 | - RETURN(); | ||
| 797 | -} | ||
| 798 | - | ||
| 799 | -void OPPROTO op_and_T0_rN(void) | ||
| 800 | -{ | ||
| 801 | - env->gregs[PARAM1] &= T0; | ||
| 802 | - RETURN(); | ||
| 803 | -} | ||
| 804 | - | ||
| 805 | -void OPPROTO op_or_T0_rN(void) | ||
| 806 | -{ | ||
| 807 | - env->gregs[PARAM1] |= T0; | ||
| 808 | - RETURN(); | ||
| 809 | -} | ||
| 810 | - | ||
| 811 | -void OPPROTO op_xor_T0_rN(void) | ||
| 812 | -{ | ||
| 813 | - env->gregs[PARAM1] ^= T0; | ||
| 814 | - RETURN(); | ||
| 815 | -} | ||
| 816 | - | ||
| 817 | -void OPPROTO op_add_rN_T0(void) | ||
| 818 | -{ | ||
| 819 | - T0 += env->gregs[PARAM1]; | ||
| 820 | - RETURN(); | ||
| 821 | -} | ||
| 822 | - | ||
| 823 | -void OPPROTO op_add_rN_T1(void) | ||
| 824 | -{ | ||
| 825 | - T1 += env->gregs[PARAM1]; | ||
| 826 | - RETURN(); | ||
| 827 | -} | ||
| 828 | - | ||
| 829 | -void OPPROTO op_add_imm_rN(void) | ||
| 830 | -{ | ||
| 831 | - env->gregs[PARAM2] += PARAM1; | ||
| 832 | - RETURN(); | ||
| 833 | -} | ||
| 834 | - | ||
| 835 | -void OPPROTO op_and_imm_rN(void) | ||
| 836 | -{ | ||
| 837 | - env->gregs[PARAM2] &= PARAM1; | ||
| 838 | - RETURN(); | ||
| 839 | -} | ||
| 840 | - | ||
| 841 | -void OPPROTO op_or_imm_rN(void) | ||
| 842 | -{ | ||
| 843 | - env->gregs[PARAM2] |= PARAM1; | ||
| 844 | - RETURN(); | ||
| 845 | -} | ||
| 846 | - | ||
| 847 | -void OPPROTO op_xor_imm_rN(void) | ||
| 848 | -{ | ||
| 849 | - env->gregs[PARAM2] ^= PARAM1; | ||
| 850 | - RETURN(); | ||
| 851 | -} | ||
| 852 | - | ||
| 853 | void OPPROTO op_dt_rN(void) | 655 | void OPPROTO op_dt_rN(void) |
| 854 | { | 656 | { |
| 855 | cond_t((--env->gregs[PARAM1]) == 0); | 657 | cond_t((--env->gregs[PARAM1]) == 0); |
| @@ -908,24 +710,6 @@ void OPPROTO op_addl_GBR_T0(void) | @@ -908,24 +710,6 @@ void OPPROTO op_addl_GBR_T0(void) | ||
| 908 | RETURN(); | 710 | RETURN(); |
| 909 | } | 711 | } |
| 910 | 712 | ||
| 911 | -void OPPROTO op_and_imm_T0(void) | ||
| 912 | -{ | ||
| 913 | - T0 &= PARAM1; | ||
| 914 | - RETURN(); | ||
| 915 | -} | ||
| 916 | - | ||
| 917 | -void OPPROTO op_or_imm_T0(void) | ||
| 918 | -{ | ||
| 919 | - T0 |= PARAM1; | ||
| 920 | - RETURN(); | ||
| 921 | -} | ||
| 922 | - | ||
| 923 | -void OPPROTO op_xor_imm_T0(void) | ||
| 924 | -{ | ||
| 925 | - T0 ^= PARAM1; | ||
| 926 | - RETURN(); | ||
| 927 | -} | ||
| 928 | - | ||
| 929 | void OPPROTO op_tst_imm_T0(void) | 713 | void OPPROTO op_tst_imm_T0(void) |
| 930 | { | 714 | { |
| 931 | cond_t((T0 & PARAM1) == 0); | 715 | cond_t((T0 & PARAM1) == 0); |
target-sh4/translate.c
| @@ -70,7 +70,7 @@ static void sh4_translate_init(void) | @@ -70,7 +70,7 @@ static void sh4_translate_init(void) | ||
| 70 | { | 70 | { |
| 71 | int i; | 71 | int i; |
| 72 | static int done_init = 0; | 72 | static int done_init = 0; |
| 73 | - static const char * const gregnames[24] = { | 73 | + static const char * const gregnames[24] = { |
| 74 | "R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0", | 74 | "R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0", |
| 75 | "R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0", | 75 | "R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0", |
| 76 | "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15", | 76 | "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15", |
| @@ -344,12 +344,12 @@ void _decode_opc(DisasContext * ctx) | @@ -344,12 +344,12 @@ void _decode_opc(DisasContext * ctx) | ||
| 344 | case 0x1000: /* mov.l Rm,@(disp,Rn) */ | 344 | case 0x1000: /* mov.l Rm,@(disp,Rn) */ |
| 345 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 345 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 346 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 346 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 347 | - gen_op_addl_imm_T1(B3_0 * 4); | 347 | + tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 4); |
| 348 | gen_op_stl_T0_T1(ctx); | 348 | gen_op_stl_T0_T1(ctx); |
| 349 | return; | 349 | return; |
| 350 | case 0x5000: /* mov.l @(disp,Rm),Rn */ | 350 | case 0x5000: /* mov.l @(disp,Rm),Rn */ |
| 351 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 351 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 352 | - gen_op_addl_imm_T0(B3_0 * 4); | 352 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 4); |
| 353 | gen_op_ldl_T0_T0(ctx); | 353 | gen_op_ldl_T0_T0(ctx); |
| 354 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 354 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 355 | return; | 355 | return; |
| @@ -367,7 +367,7 @@ void _decode_opc(DisasContext * ctx) | @@ -367,7 +367,7 @@ void _decode_opc(DisasContext * ctx) | ||
| 367 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 367 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 368 | return; | 368 | return; |
| 369 | case 0x7000: /* add #imm,Rn */ | 369 | case 0x7000: /* add #imm,Rn */ |
| 370 | - gen_op_add_imm_rN(B7_0s, REG(B11_8)); | 370 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], B7_0s); |
| 371 | return; | 371 | return; |
| 372 | case 0xa000: /* bra disp */ | 372 | case 0xa000: /* bra disp */ |
| 373 | CHECK_NOT_DELAY_SLOT | 373 | CHECK_NOT_DELAY_SLOT |
| @@ -419,104 +419,119 @@ void _decode_opc(DisasContext * ctx) | @@ -419,104 +419,119 @@ void _decode_opc(DisasContext * ctx) | ||
| 419 | return; | 419 | return; |
| 420 | case 0x2004: /* mov.b Rm,@-Rn */ | 420 | case 0x2004: /* mov.b Rm,@-Rn */ |
| 421 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 421 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 422 | - gen_op_dec1_rN(REG(B11_8)); /* modify register status */ | 422 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 423 | + cpu_gregs[REG(B11_8)], 1); /* modify register status */ | ||
| 423 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 424 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 424 | - gen_op_inc1_rN(REG(B11_8)); /* recover register status */ | ||
| 425 | - gen_op_stb_T0_T1(ctx); /* might cause re-execution */ | ||
| 426 | - gen_op_dec1_rN(REG(B11_8)); /* modify register status */ | 425 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], |
| 426 | + cpu_gregs[REG(B11_8)], 1); /* recover register status */ | ||
| 427 | + gen_op_stb_T0_T1(ctx); /* might cause re-execution */ | ||
| 428 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], | ||
| 429 | + cpu_gregs[REG(B11_8)], 1); /* modify register status */ | ||
| 427 | return; | 430 | return; |
| 428 | case 0x2005: /* mov.w Rm,@-Rn */ | 431 | case 0x2005: /* mov.w Rm,@-Rn */ |
| 429 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 432 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 430 | - gen_op_dec2_rN(REG(B11_8)); | 433 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 434 | + cpu_gregs[REG(B11_8)], 2); | ||
| 431 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 435 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 432 | - gen_op_inc2_rN(REG(B11_8)); | 436 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], |
| 437 | + cpu_gregs[REG(B11_8)], 2); | ||
| 433 | gen_op_stw_T0_T1(ctx); | 438 | gen_op_stw_T0_T1(ctx); |
| 434 | - gen_op_dec2_rN(REG(B11_8)); | 439 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 440 | + cpu_gregs[REG(B11_8)], 2); | ||
| 435 | return; | 441 | return; |
| 436 | case 0x2006: /* mov.l Rm,@-Rn */ | 442 | case 0x2006: /* mov.l Rm,@-Rn */ |
| 437 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 443 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 438 | - gen_op_dec4_rN(REG(B11_8)); | 444 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 445 | + cpu_gregs[REG(B11_8)], 4); | ||
| 439 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 446 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 440 | - gen_op_inc4_rN(REG(B11_8)); | 447 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], |
| 448 | + cpu_gregs[REG(B11_8)], 4); | ||
| 441 | gen_op_stl_T0_T1(ctx); | 449 | gen_op_stl_T0_T1(ctx); |
| 442 | - gen_op_dec4_rN(REG(B11_8)); | 450 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], |
| 451 | + cpu_gregs[REG(B11_8)], 4); | ||
| 443 | return; | 452 | return; |
| 444 | case 0x6004: /* mov.b @Rm+,Rn */ | 453 | case 0x6004: /* mov.b @Rm+,Rn */ |
| 445 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 454 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 446 | gen_op_ldb_T0_T0(ctx); | 455 | gen_op_ldb_T0_T0(ctx); |
| 447 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 456 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 448 | if ( B11_8 != B7_4 ) | 457 | if ( B11_8 != B7_4 ) |
| 449 | - gen_op_inc1_rN(REG(B7_4)); | 458 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| 459 | + cpu_gregs[REG(B7_4)], 1); | ||
| 450 | return; | 460 | return; |
| 451 | case 0x6005: /* mov.w @Rm+,Rn */ | 461 | case 0x6005: /* mov.w @Rm+,Rn */ |
| 452 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 462 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 453 | gen_op_ldw_T0_T0(ctx); | 463 | gen_op_ldw_T0_T0(ctx); |
| 454 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 464 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 455 | if ( B11_8 != B7_4 ) | 465 | if ( B11_8 != B7_4 ) |
| 456 | - gen_op_inc2_rN(REG(B7_4)); | 466 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| 467 | + cpu_gregs[REG(B7_4)], 2); | ||
| 457 | return; | 468 | return; |
| 458 | case 0x6006: /* mov.l @Rm+,Rn */ | 469 | case 0x6006: /* mov.l @Rm+,Rn */ |
| 459 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 470 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 460 | gen_op_ldl_T0_T0(ctx); | 471 | gen_op_ldl_T0_T0(ctx); |
| 461 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 472 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 462 | if ( B11_8 != B7_4 ) | 473 | if ( B11_8 != B7_4 ) |
| 463 | - gen_op_inc4_rN(REG(B7_4)); | 474 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| 475 | + cpu_gregs[REG(B7_4)], 4); | ||
| 464 | return; | 476 | return; |
| 465 | case 0x0004: /* mov.b Rm,@(R0,Rn) */ | 477 | case 0x0004: /* mov.b Rm,@(R0,Rn) */ |
| 466 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 478 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 467 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 479 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 468 | - gen_op_add_rN_T1(REG(0)); | 480 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 469 | gen_op_stb_T0_T1(ctx); | 481 | gen_op_stb_T0_T1(ctx); |
| 470 | return; | 482 | return; |
| 471 | case 0x0005: /* mov.w Rm,@(R0,Rn) */ | 483 | case 0x0005: /* mov.w Rm,@(R0,Rn) */ |
| 472 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 484 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 473 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 485 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 474 | - gen_op_add_rN_T1(REG(0)); | 486 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 475 | gen_op_stw_T0_T1(ctx); | 487 | gen_op_stw_T0_T1(ctx); |
| 476 | return; | 488 | return; |
| 477 | case 0x0006: /* mov.l Rm,@(R0,Rn) */ | 489 | case 0x0006: /* mov.l Rm,@(R0,Rn) */ |
| 478 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 490 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 479 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 491 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 480 | - gen_op_add_rN_T1(REG(0)); | 492 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 481 | gen_op_stl_T0_T1(ctx); | 493 | gen_op_stl_T0_T1(ctx); |
| 482 | return; | 494 | return; |
| 483 | case 0x000c: /* mov.b @(R0,Rm),Rn */ | 495 | case 0x000c: /* mov.b @(R0,Rm),Rn */ |
| 484 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 485 | - gen_op_add_rN_T0(REG(0)); | 496 | + tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 486 | gen_op_ldb_T0_T0(ctx); | 497 | gen_op_ldb_T0_T0(ctx); |
| 487 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 498 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 488 | return; | 499 | return; |
| 489 | case 0x000d: /* mov.w @(R0,Rm),Rn */ | 500 | case 0x000d: /* mov.w @(R0,Rm),Rn */ |
| 490 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 491 | - gen_op_add_rN_T0(REG(0)); | 501 | + tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 492 | gen_op_ldw_T0_T0(ctx); | 502 | gen_op_ldw_T0_T0(ctx); |
| 493 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 503 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 494 | return; | 504 | return; |
| 495 | case 0x000e: /* mov.l @(R0,Rm),Rn */ | 505 | case 0x000e: /* mov.l @(R0,Rm),Rn */ |
| 496 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 497 | - gen_op_add_rN_T0(REG(0)); | 506 | + tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); |
| 498 | gen_op_ldl_T0_T0(ctx); | 507 | gen_op_ldl_T0_T0(ctx); |
| 499 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 508 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 500 | return; | 509 | return; |
| 501 | case 0x6008: /* swap.b Rm,Rn */ | 510 | case 0x6008: /* swap.b Rm,Rn */ |
| 502 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 503 | - gen_op_swapb_T0(); | ||
| 504 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 511 | + tcg_gen_andi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)], 0xffff0000); |
| 512 | + tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xff); | ||
| 513 | + tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 8); | ||
| 514 | + tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | ||
| 515 | + tcg_gen_shri_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 8); | ||
| 516 | + tcg_gen_andi_i32(cpu_T[0], cpu_T[0], 0xff); | ||
| 517 | + tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_T[0]); | ||
| 505 | return; | 518 | return; |
| 506 | case 0x6009: /* swap.w Rm,Rn */ | 519 | case 0x6009: /* swap.w Rm,Rn */ |
| 507 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 508 | - gen_op_swapw_T0(); | ||
| 509 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 520 | + tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xffff); |
| 521 | + tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 16); | ||
| 522 | + tcg_gen_shri_i32(cpu_T[1], cpu_gregs[REG(B7_4)], 16); | ||
| 523 | + tcg_gen_andi_i32(cpu_T[1], cpu_T[1], 0xffff); | ||
| 524 | + tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_T[0], cpu_T[1]); | ||
| 510 | return; | 525 | return; |
| 511 | case 0x200d: /* xtrct Rm,Rn */ | 526 | case 0x200d: /* xtrct Rm,Rn */ |
| 512 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 513 | - tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | ||
| 514 | - gen_op_xtrct_T0_T1(); | ||
| 515 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); | 527 | + tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B7_4)], 0xffff); |
| 528 | + tcg_gen_shli_i32(cpu_T[0], cpu_T[0], 16); | ||
| 529 | + tcg_gen_shri_i32(cpu_T[1], cpu_gregs[REG(B11_8)], 16); | ||
| 530 | + tcg_gen_andi_i32(cpu_T[1], cpu_T[1], 0xffff); | ||
| 531 | + tcg_gen_ori_i32(cpu_gregs[REG(B11_8)], cpu_T[0], cpu_T[1]); | ||
| 516 | return; | 532 | return; |
| 517 | case 0x300c: /* add Rm,Rn */ | 533 | case 0x300c: /* add Rm,Rn */ |
| 518 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 519 | - gen_op_add_T0_rN(REG(B11_8)); | 534 | + tcg_gen_add_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 520 | return; | 535 | return; |
| 521 | case 0x300e: /* addc Rm,Rn */ | 536 | case 0x300e: /* addc Rm,Rn */ |
| 522 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 537 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -531,8 +546,7 @@ void _decode_opc(DisasContext * ctx) | @@ -531,8 +546,7 @@ void _decode_opc(DisasContext * ctx) | ||
| 531 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); | 546 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); |
| 532 | return; | 547 | return; |
| 533 | case 0x2009: /* and Rm,Rn */ | 548 | case 0x2009: /* and Rm,Rn */ |
| 534 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 535 | - gen_op_and_T0_rN(REG(B11_8)); | 549 | + tcg_gen_and_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 536 | return; | 550 | return; |
| 537 | case 0x3000: /* cmp/eq Rm,Rn */ | 551 | case 0x3000: /* cmp/eq Rm,Rn */ |
| 538 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 552 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -614,8 +628,8 @@ void _decode_opc(DisasContext * ctx) | @@ -614,8 +628,8 @@ void _decode_opc(DisasContext * ctx) | ||
| 614 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 628 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 615 | gen_op_ldl_T0_T0(ctx); | 629 | gen_op_ldl_T0_T0(ctx); |
| 616 | gen_op_macl_T0_T1(); | 630 | gen_op_macl_T0_T1(); |
| 617 | - gen_op_inc4_rN(REG(B11_8)); | ||
| 618 | - gen_op_inc4_rN(REG(B7_4)); | 631 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 4); |
| 632 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); | ||
| 619 | return; | 633 | return; |
| 620 | case 0x400f: /* mac.w @Rm+,@Rn+ */ | 634 | case 0x400f: /* mac.w @Rm+,@Rn+ */ |
| 621 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | 635 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| @@ -624,8 +638,8 @@ void _decode_opc(DisasContext * ctx) | @@ -624,8 +638,8 @@ void _decode_opc(DisasContext * ctx) | ||
| 624 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 638 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 625 | gen_op_ldl_T0_T0(ctx); | 639 | gen_op_ldl_T0_T0(ctx); |
| 626 | gen_op_macw_T0_T1(); | 640 | gen_op_macw_T0_T1(); |
| 627 | - gen_op_inc2_rN(REG(B11_8)); | ||
| 628 | - gen_op_inc2_rN(REG(B7_4)); | 641 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); |
| 642 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], cpu_gregs[REG(B7_4)], 2); | ||
| 629 | return; | 643 | return; |
| 630 | case 0x0007: /* mul.l Rm,Rn */ | 644 | case 0x0007: /* mul.l Rm,Rn */ |
| 631 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 645 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -649,9 +663,7 @@ void _decode_opc(DisasContext * ctx) | @@ -649,9 +663,7 @@ void _decode_opc(DisasContext * ctx) | ||
| 649 | gen_op_muluw_T0_T1(); | 663 | gen_op_muluw_T0_T1(); |
| 650 | return; | 664 | return; |
| 651 | case 0x600b: /* neg Rm,Rn */ | 665 | case 0x600b: /* neg Rm,Rn */ |
| 652 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 653 | - gen_op_neg_T0(); | ||
| 654 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 666 | + tcg_gen_neg_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 655 | return; | 667 | return; |
| 656 | case 0x600a: /* negc Rm,Rn */ | 668 | case 0x600a: /* negc Rm,Rn */ |
| 657 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 669 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -659,13 +671,10 @@ void _decode_opc(DisasContext * ctx) | @@ -659,13 +671,10 @@ void _decode_opc(DisasContext * ctx) | ||
| 659 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 671 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 660 | return; | 672 | return; |
| 661 | case 0x6007: /* not Rm,Rn */ | 673 | case 0x6007: /* not Rm,Rn */ |
| 662 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 663 | - gen_op_not_T0(); | ||
| 664 | - tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 674 | + tcg_gen_not_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 665 | return; | 675 | return; |
| 666 | case 0x200b: /* or Rm,Rn */ | 676 | case 0x200b: /* or Rm,Rn */ |
| 667 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 668 | - gen_op_or_T0_rN(REG(B11_8)); | 677 | + tcg_gen_or_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 669 | return; | 678 | return; |
| 670 | case 0x400c: /* shad Rm,Rn */ | 679 | case 0x400c: /* shad Rm,Rn */ |
| 671 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 680 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -680,8 +689,7 @@ void _decode_opc(DisasContext * ctx) | @@ -680,8 +689,7 @@ void _decode_opc(DisasContext * ctx) | ||
| 680 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); | 689 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); |
| 681 | return; | 690 | return; |
| 682 | case 0x3008: /* sub Rm,Rn */ | 691 | case 0x3008: /* sub Rm,Rn */ |
| 683 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 684 | - gen_op_sub_T0_rN(REG(B11_8)); | 692 | + tcg_gen_sub_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 685 | return; | 693 | return; |
| 686 | case 0x300a: /* subc Rm,Rn */ | 694 | case 0x300a: /* subc Rm,Rn */ |
| 687 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 695 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| @@ -701,8 +709,7 @@ void _decode_opc(DisasContext * ctx) | @@ -701,8 +709,7 @@ void _decode_opc(DisasContext * ctx) | ||
| 701 | gen_op_tst_T0_T1(); | 709 | gen_op_tst_T0_T1(); |
| 702 | return; | 710 | return; |
| 703 | case 0x200a: /* xor Rm,Rn */ | 711 | case 0x200a: /* xor Rm,Rn */ |
| 704 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 705 | - gen_op_xor_T0_rN(REG(B11_8)); | 712 | + tcg_gen_xor_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], cpu_gregs[REG(B7_4)]); |
| 706 | return; | 713 | return; |
| 707 | case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ | 714 | case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ |
| 708 | if (ctx->fpscr & FPSCR_SZ) { | 715 | if (ctx->fpscr & FPSCR_SZ) { |
| @@ -740,40 +747,39 @@ void _decode_opc(DisasContext * ctx) | @@ -740,40 +747,39 @@ void _decode_opc(DisasContext * ctx) | ||
| 740 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 747 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 741 | gen_op_ldfq_T0_DT0(ctx); | 748 | gen_op_ldfq_T0_DT0(ctx); |
| 742 | gen_op_fmov_DT0_drN(XREG(B11_8)); | 749 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
| 743 | - gen_op_inc8_rN(REG(B7_4)); | 750 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| 751 | + cpu_gregs[REG(B7_4)], 8); | ||
| 744 | } else { | 752 | } else { |
| 745 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 753 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 746 | gen_op_ldfl_T0_FT0(ctx); | 754 | gen_op_ldfl_T0_FT0(ctx); |
| 747 | gen_op_fmov_FT0_frN(FREG(B11_8)); | 755 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 748 | - gen_op_inc4_rN(REG(B7_4)); | 756 | + tcg_gen_addi_i32(cpu_gregs[REG(B7_4)], |
| 757 | + cpu_gregs[REG(B7_4)], 4); | ||
| 749 | } | 758 | } |
| 750 | return; | 759 | return; |
| 751 | case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ | 760 | case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ |
| 752 | if (ctx->fpscr & FPSCR_SZ) { | 761 | if (ctx->fpscr & FPSCR_SZ) { |
| 753 | - gen_op_dec8_rN(REG(B11_8)); | 762 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); |
| 754 | gen_op_fmov_drN_DT0(XREG(B7_4)); | 763 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| 755 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 764 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 756 | - gen_op_inc8_rN(REG(B11_8)); | 765 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); |
| 757 | gen_op_stfq_DT0_T1(ctx); | 766 | gen_op_stfq_DT0_T1(ctx); |
| 758 | - gen_op_dec8_rN(REG(B11_8)); | 767 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); |
| 759 | } else { | 768 | } else { |
| 760 | - gen_op_dec4_rN(REG(B11_8)); | 769 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 761 | gen_op_fmov_frN_FT0(FREG(B7_4)); | 770 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
| 762 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 771 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 763 | - gen_op_inc4_rN(REG(B11_8)); | 772 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 764 | gen_op_stfl_FT0_T1(ctx); | 773 | gen_op_stfl_FT0_T1(ctx); |
| 765 | - gen_op_dec4_rN(REG(B11_8)); | 774 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 766 | } | 775 | } |
| 767 | return; | 776 | return; |
| 768 | case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ | 777 | case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ |
| 778 | + tcg_gen_add_i32(cpu_T[0], cpu_gregs[REG(B7_4)], cpu_gregs[REG(0)]); | ||
| 769 | if (ctx->fpscr & FPSCR_SZ) { | 779 | if (ctx->fpscr & FPSCR_SZ) { |
| 770 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 771 | - gen_op_add_rN_T0(REG(0)); | ||
| 772 | gen_op_ldfq_T0_DT0(ctx); | 780 | gen_op_ldfq_T0_DT0(ctx); |
| 773 | gen_op_fmov_DT0_drN(XREG(B11_8)); | 781 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
| 774 | } else { | 782 | } else { |
| 775 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | ||
| 776 | - gen_op_add_rN_T0(REG(0)); | ||
| 777 | gen_op_ldfl_T0_FT0(ctx); | 783 | gen_op_ldfl_T0_FT0(ctx); |
| 778 | gen_op_fmov_FT0_frN(FREG(B11_8)); | 784 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 779 | } | 785 | } |
| @@ -782,12 +788,12 @@ void _decode_opc(DisasContext * ctx) | @@ -782,12 +788,12 @@ void _decode_opc(DisasContext * ctx) | ||
| 782 | if (ctx->fpscr & FPSCR_SZ) { | 788 | if (ctx->fpscr & FPSCR_SZ) { |
| 783 | gen_op_fmov_drN_DT0(XREG(B7_4)); | 789 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| 784 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 790 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 785 | - gen_op_add_rN_T1(REG(0)); | 791 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 786 | gen_op_stfq_DT0_T1(ctx); | 792 | gen_op_stfq_DT0_T1(ctx); |
| 787 | } else { | 793 | } else { |
| 788 | gen_op_fmov_frN_FT0(FREG(B7_4)); | 794 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
| 789 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 795 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 790 | - gen_op_add_rN_T1(REG(0)); | 796 | + tcg_gen_add_i32(cpu_T[1], cpu_T[1], cpu_gregs[REG(0)]); |
| 791 | gen_op_stfl_FT0_T1(ctx); | 797 | gen_op_stfl_FT0_T1(ctx); |
| 792 | } | 798 | } |
| 793 | return; | 799 | return; |
| @@ -840,14 +846,14 @@ void _decode_opc(DisasContext * ctx) | @@ -840,14 +846,14 @@ void _decode_opc(DisasContext * ctx) | ||
| 840 | 846 | ||
| 841 | switch (ctx->opcode & 0xff00) { | 847 | switch (ctx->opcode & 0xff00) { |
| 842 | case 0xc900: /* and #imm,R0 */ | 848 | case 0xc900: /* and #imm,R0 */ |
| 843 | - gen_op_and_imm_rN(B7_0, REG(0)); | 849 | + tcg_gen_andi_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); |
| 844 | return; | 850 | return; |
| 845 | case 0xcd00: /* and.b #imm,@(R0,GBR) */ | 851 | case 0xcd00: /* and.b #imm,@(R0,GBR) */ |
| 846 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 852 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 847 | gen_op_addl_GBR_T0(); | 853 | gen_op_addl_GBR_T0(); |
| 848 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 854 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 849 | gen_op_ldub_T0_T0(ctx); | 855 | gen_op_ldub_T0_T0(ctx); |
| 850 | - gen_op_and_imm_T0(B7_0); | 856 | + tcg_gen_andi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 851 | gen_op_stb_T0_T1(ctx); | 857 | gen_op_stb_T0_T1(ctx); |
| 852 | return; | 858 | return; |
| 853 | case 0x8b00: /* bf label */ | 859 | case 0x8b00: /* bf label */ |
| @@ -878,39 +884,39 @@ void _decode_opc(DisasContext * ctx) | @@ -878,39 +884,39 @@ void _decode_opc(DisasContext * ctx) | ||
| 878 | return; | 884 | return; |
| 879 | case 0xc400: /* mov.b @(disp,GBR),R0 */ | 885 | case 0xc400: /* mov.b @(disp,GBR),R0 */ |
| 880 | gen_op_stc_gbr_T0(); | 886 | gen_op_stc_gbr_T0(); |
| 881 | - gen_op_addl_imm_T0(B7_0); | 887 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 882 | gen_op_ldb_T0_T0(ctx); | 888 | gen_op_ldb_T0_T0(ctx); |
| 883 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | 889 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 884 | return; | 890 | return; |
| 885 | case 0xc500: /* mov.w @(disp,GBR),R0 */ | 891 | case 0xc500: /* mov.w @(disp,GBR),R0 */ |
| 886 | gen_op_stc_gbr_T0(); | 892 | gen_op_stc_gbr_T0(); |
| 887 | - gen_op_addl_imm_T0(B7_0 * 2); | 893 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 2); |
| 888 | gen_op_ldw_T0_T0(ctx); | 894 | gen_op_ldw_T0_T0(ctx); |
| 889 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | 895 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 890 | return; | 896 | return; |
| 891 | case 0xc600: /* mov.l @(disp,GBR),R0 */ | 897 | case 0xc600: /* mov.l @(disp,GBR),R0 */ |
| 892 | gen_op_stc_gbr_T0(); | 898 | gen_op_stc_gbr_T0(); |
| 893 | - gen_op_addl_imm_T0(B7_0 * 4); | 899 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 4); |
| 894 | gen_op_ldl_T0_T0(ctx); | 900 | gen_op_ldl_T0_T0(ctx); |
| 895 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | 901 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 896 | return; | 902 | return; |
| 897 | case 0xc000: /* mov.b R0,@(disp,GBR) */ | 903 | case 0xc000: /* mov.b R0,@(disp,GBR) */ |
| 898 | gen_op_stc_gbr_T0(); | 904 | gen_op_stc_gbr_T0(); |
| 899 | - gen_op_addl_imm_T0(B7_0); | 905 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0); |
| 900 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 906 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 901 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 907 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 902 | gen_op_stb_T0_T1(ctx); | 908 | gen_op_stb_T0_T1(ctx); |
| 903 | return; | 909 | return; |
| 904 | case 0xc100: /* mov.w R0,@(disp,GBR) */ | 910 | case 0xc100: /* mov.w R0,@(disp,GBR) */ |
| 905 | gen_op_stc_gbr_T0(); | 911 | gen_op_stc_gbr_T0(); |
| 906 | - gen_op_addl_imm_T0(B7_0 * 2); | 912 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 2); |
| 907 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 913 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 908 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 914 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 909 | gen_op_stw_T0_T1(ctx); | 915 | gen_op_stw_T0_T1(ctx); |
| 910 | return; | 916 | return; |
| 911 | case 0xc200: /* mov.l R0,@(disp,GBR) */ | 917 | case 0xc200: /* mov.l R0,@(disp,GBR) */ |
| 912 | gen_op_stc_gbr_T0(); | 918 | gen_op_stc_gbr_T0(); |
| 913 | - gen_op_addl_imm_T0(B7_0 * 4); | 919 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B7_0 * 4); |
| 914 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 920 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 915 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 921 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 916 | gen_op_stl_T0_T1(ctx); | 922 | gen_op_stl_T0_T1(ctx); |
| @@ -918,24 +924,24 @@ void _decode_opc(DisasContext * ctx) | @@ -918,24 +924,24 @@ void _decode_opc(DisasContext * ctx) | ||
| 918 | case 0x8000: /* mov.b R0,@(disp,Rn) */ | 924 | case 0x8000: /* mov.b R0,@(disp,Rn) */ |
| 919 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 925 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 920 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); | 926 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); |
| 921 | - gen_op_addl_imm_T1(B3_0); | 927 | + tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0); |
| 922 | gen_op_stb_T0_T1(ctx); | 928 | gen_op_stb_T0_T1(ctx); |
| 923 | return; | 929 | return; |
| 924 | case 0x8100: /* mov.w R0,@(disp,Rn) */ | 930 | case 0x8100: /* mov.w R0,@(disp,Rn) */ |
| 925 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 931 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 926 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); | 932 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B7_4)]); |
| 927 | - gen_op_addl_imm_T1(B3_0 * 2); | 933 | + tcg_gen_addi_i32(cpu_T[1], cpu_T[1], B3_0 * 2); |
| 928 | gen_op_stw_T0_T1(ctx); | 934 | gen_op_stw_T0_T1(ctx); |
| 929 | return; | 935 | return; |
| 930 | case 0x8400: /* mov.b @(disp,Rn),R0 */ | 936 | case 0x8400: /* mov.b @(disp,Rn),R0 */ |
| 931 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 937 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 932 | - gen_op_addl_imm_T0(B3_0); | 938 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0); |
| 933 | gen_op_ldb_T0_T0(ctx); | 939 | gen_op_ldb_T0_T0(ctx); |
| 934 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | 940 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 935 | return; | 941 | return; |
| 936 | case 0x8500: /* mov.w @(disp,Rn),R0 */ | 942 | case 0x8500: /* mov.w @(disp,Rn),R0 */ |
| 937 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | 943 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
| 938 | - gen_op_addl_imm_T0(B3_0 * 2); | 944 | + tcg_gen_addi_i32(cpu_T[0], cpu_T[0], B3_0 * 2); |
| 939 | gen_op_ldw_T0_T0(ctx); | 945 | gen_op_ldw_T0_T0(ctx); |
| 940 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); | 946 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
| 941 | return; | 947 | return; |
| @@ -944,14 +950,14 @@ void _decode_opc(DisasContext * ctx) | @@ -944,14 +950,14 @@ void _decode_opc(DisasContext * ctx) | ||
| 944 | ((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3); | 950 | ((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3); |
| 945 | return; | 951 | return; |
| 946 | case 0xcb00: /* or #imm,R0 */ | 952 | case 0xcb00: /* or #imm,R0 */ |
| 947 | - gen_op_or_imm_rN(B7_0, REG(0)); | 953 | + tcg_gen_ori_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); |
| 948 | return; | 954 | return; |
| 949 | case 0xcf00: /* or.b #imm,@(R0,GBR) */ | 955 | case 0xcf00: /* or.b #imm,@(R0,GBR) */ |
| 950 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 956 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 951 | gen_op_addl_GBR_T0(); | 957 | gen_op_addl_GBR_T0(); |
| 952 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 958 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 953 | gen_op_ldub_T0_T0(ctx); | 959 | gen_op_ldub_T0_T0(ctx); |
| 954 | - gen_op_or_imm_T0(B7_0); | 960 | + tcg_gen_ori_i32(cpu_T[0], cpu_T[0], B7_0); |
| 955 | gen_op_stb_T0_T1(ctx); | 961 | gen_op_stb_T0_T1(ctx); |
| 956 | return; | 962 | return; |
| 957 | case 0xc300: /* trapa #imm */ | 963 | case 0xc300: /* trapa #imm */ |
| @@ -969,14 +975,14 @@ void _decode_opc(DisasContext * ctx) | @@ -969,14 +975,14 @@ void _decode_opc(DisasContext * ctx) | ||
| 969 | gen_op_tst_imm_T0(B7_0); | 975 | gen_op_tst_imm_T0(B7_0); |
| 970 | return; | 976 | return; |
| 971 | case 0xca00: /* xor #imm,R0 */ | 977 | case 0xca00: /* xor #imm,R0 */ |
| 972 | - gen_op_xor_imm_rN(B7_0, REG(0)); | 978 | + tcg_gen_xori_i32(cpu_gregs[REG(0)], cpu_gregs[REG(0)], B7_0); |
| 973 | return; | 979 | return; |
| 974 | case 0xce00: /* xor.b #imm,@(R0,GBR) */ | 980 | case 0xce00: /* xor.b #imm,@(R0,GBR) */ |
| 975 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); | 981 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
| 976 | gen_op_addl_GBR_T0(); | 982 | gen_op_addl_GBR_T0(); |
| 977 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 983 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 978 | gen_op_ldub_T0_T0(ctx); | 984 | gen_op_ldub_T0_T0(ctx); |
| 979 | - gen_op_xor_imm_T0(B7_0); | 985 | + tcg_gen_xori_i32(cpu_T[0], cpu_T[0], B7_0); |
| 980 | gen_op_stb_T0_T1(ctx); | 986 | gen_op_stb_T0_T1(ctx); |
| 981 | return; | 987 | return; |
| 982 | } | 988 | } |
| @@ -990,19 +996,19 @@ void _decode_opc(DisasContext * ctx) | @@ -990,19 +996,19 @@ void _decode_opc(DisasContext * ctx) | ||
| 990 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | 996 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 991 | gen_op_ldl_T0_T0(ctx); | 997 | gen_op_ldl_T0_T0(ctx); |
| 992 | tcg_gen_mov_i32(cpu_gregs[ALTREG(B6_4)], cpu_T[0]); | 998 | tcg_gen_mov_i32(cpu_gregs[ALTREG(B6_4)], cpu_T[0]); |
| 993 | - gen_op_inc4_rN(REG(B11_8)); | 999 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 994 | return; | 1000 | return; |
| 995 | case 0x0082: /* stc Rm_BANK,Rn */ | 1001 | case 0x0082: /* stc Rm_BANK,Rn */ |
| 996 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); | 1002 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); |
| 997 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); | 1003 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
| 998 | return; | 1004 | return; |
| 999 | case 0x4083: /* stc.l Rm_BANK,@-Rn */ | 1005 | case 0x4083: /* stc.l Rm_BANK,@-Rn */ |
| 1000 | - gen_op_dec4_rN(REG(B11_8)); | 1006 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1001 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); | 1007 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
| 1002 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); | 1008 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); |
| 1003 | - gen_op_inc4_rN(REG(B11_8)); | 1009 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1004 | gen_op_stl_T0_T1(ctx); | 1010 | gen_op_stl_T0_T1(ctx); |
| 1005 | - gen_op_dec4_rN(REG(B11_8)); | 1011 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 4); |
| 1006 | return; | 1012 | return; |
| 1007 | } | 1013 | } |
| 1008 | 1014 | ||
| @@ -1051,7 +1057,8 @@ void _decode_opc(DisasContext * ctx) | @@ -1051,7 +1057,8 @@ void _decode_opc(DisasContext * ctx) | ||
| 1051 | case ldpnum: \ | 1057 | case ldpnum: \ |
| 1052 | tcg_gen_mov_i32 (cpu_T[0], cpu_gregs[REG(B11_8)]); \ | 1058 | tcg_gen_mov_i32 (cpu_T[0], cpu_gregs[REG(B11_8)]); \ |
| 1053 | gen_op_ldl_T0_T0 (ctx); \ | 1059 | gen_op_ldl_T0_T0 (ctx); \ |
| 1054 | - gen_op_inc4_rN (REG(B11_8)); \ | 1060 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], \ |
| 1061 | + cpu_gregs[REG(B11_8)], 4); \ | ||
| 1055 | gen_op_##ldop##_T0_##reg (); \ | 1062 | gen_op_##ldop##_T0_##reg (); \ |
| 1056 | extrald \ | 1063 | extrald \ |
| 1057 | return; \ | 1064 | return; \ |
| @@ -1061,11 +1068,14 @@ void _decode_opc(DisasContext * ctx) | @@ -1061,11 +1068,14 @@ void _decode_opc(DisasContext * ctx) | ||
| 1061 | return; \ | 1068 | return; \ |
| 1062 | case stpnum: \ | 1069 | case stpnum: \ |
| 1063 | gen_op_##stop##_##reg##_T0 (); \ | 1070 | gen_op_##stop##_##reg##_T0 (); \ |
| 1064 | - gen_op_dec4_rN (REG(B11_8)); \ | 1071 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], \ |
| 1072 | + cpu_gregs[REG(B11_8)], 4); \ | ||
| 1065 | tcg_gen_mov_i32 (cpu_T[1], cpu_gregs[REG(B11_8)]); \ | 1073 | tcg_gen_mov_i32 (cpu_T[1], cpu_gregs[REG(B11_8)]); \ |
| 1066 | - gen_op_inc4_rN (REG(B11_8)); \ | 1074 | + tcg_gen_addi_i32(cpu_gregs[REG(B11_8)], \ |
| 1075 | + cpu_gregs[REG(B11_8)], 4); \ | ||
| 1067 | gen_op_stl_T0_T1 (ctx); \ | 1076 | gen_op_stl_T0_T1 (ctx); \ |
| 1068 | - gen_op_dec4_rN (REG(B11_8)); \ | 1077 | + tcg_gen_subi_i32(cpu_gregs[REG(B11_8)], \ |
| 1078 | + cpu_gregs[REG(B11_8)], 4); \ | ||
| 1069 | return; | 1079 | return; |
| 1070 | LDST(sr, 0x400e, 0x4007, ldc, 0x0002, 0x4003, stc, ctx->bstate = | 1080 | LDST(sr, 0x400e, 0x4007, ldc, 0x0002, 0x4003, stc, ctx->bstate = |
| 1071 | BS_STOP;) | 1081 | BS_STOP;) |
| @@ -1125,29 +1135,29 @@ void _decode_opc(DisasContext * ctx) | @@ -1125,29 +1135,29 @@ void _decode_opc(DisasContext * ctx) | ||
| 1125 | gen_op_shlr_Rn(REG(B11_8)); | 1135 | gen_op_shlr_Rn(REG(B11_8)); |
| 1126 | return; | 1136 | return; |
| 1127 | case 0x4008: /* shll2 Rn */ | 1137 | case 0x4008: /* shll2 Rn */ |
| 1128 | - gen_op_shll2_Rn(REG(B11_8)); | 1138 | + tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); |
| 1129 | return; | 1139 | return; |
| 1130 | case 0x4018: /* shll8 Rn */ | 1140 | case 0x4018: /* shll8 Rn */ |
| 1131 | - gen_op_shll8_Rn(REG(B11_8)); | 1141 | + tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); |
| 1132 | return; | 1142 | return; |
| 1133 | case 0x4028: /* shll16 Rn */ | 1143 | case 0x4028: /* shll16 Rn */ |
| 1134 | - gen_op_shll16_Rn(REG(B11_8)); | 1144 | + tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 16); |
| 1135 | return; | 1145 | return; |
| 1136 | case 0x4009: /* shlr2 Rn */ | 1146 | case 0x4009: /* shlr2 Rn */ |
| 1137 | - gen_op_shlr2_Rn(REG(B11_8)); | 1147 | + tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); |
| 1138 | return; | 1148 | return; |
| 1139 | case 0x4019: /* shlr8 Rn */ | 1149 | case 0x4019: /* shlr8 Rn */ |
| 1140 | - gen_op_shlr8_Rn(REG(B11_8)); | 1150 | + tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 8); |
| 1141 | return; | 1151 | return; |
| 1142 | case 0x4029: /* shlr16 Rn */ | 1152 | case 0x4029: /* shlr16 Rn */ |
| 1143 | - gen_op_shlr16_Rn(REG(B11_8)); | 1153 | + tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 16); |
| 1144 | return; | 1154 | return; |
| 1145 | case 0x401b: /* tas.b @Rn */ | 1155 | case 0x401b: /* tas.b @Rn */ |
| 1146 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); | 1156 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
| 1147 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); | 1157 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
| 1148 | gen_op_ldub_T0_T0(ctx); | 1158 | gen_op_ldub_T0_T0(ctx); |
| 1149 | gen_op_cmp_eq_imm_T0(0); | 1159 | gen_op_cmp_eq_imm_T0(0); |
| 1150 | - gen_op_or_imm_T0(0x80); | 1160 | + tcg_gen_ori_i32(cpu_T[0], cpu_T[0], 0x80); |
| 1151 | gen_op_stb_T0_T1(ctx); | 1161 | gen_op_stb_T0_T1(ctx); |
| 1152 | return; | 1162 | return; |
| 1153 | case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ | 1163 | case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ |