Commit 559dd74de8880b05ac9b3da2228f982aafa8f580

Authored by aurel32
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
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 */