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 | 43 | RETURN(); |
44 | 44 | } |
45 | 45 | |
46 | -void OPPROTO op_not_T0(void) | |
47 | -{ | |
48 | - T0 = ~T0; | |
49 | - RETURN(); | |
50 | -} | |
51 | - | |
52 | 46 | void OPPROTO op_bf_s(void) |
53 | 47 | { |
54 | 48 | env->delayed_pc = PARAM1; |
... | ... | @@ -113,18 +107,6 @@ void OPPROTO op_rts(void) |
113 | 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 | 110 | void OPPROTO op_clrmac(void) |
129 | 111 | { |
130 | 112 | env->mach = env->macl = 0; |
... | ... | @@ -180,30 +162,6 @@ void OPPROTO op_rte(void) |
180 | 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 | 165 | void OPPROTO op_addc_T0_T1(void) |
208 | 166 | { |
209 | 167 | helper_addc_T0_T1(); |
... | ... | @@ -329,12 +287,6 @@ void OPPROTO op_muluw_T0_T1(void) |
329 | 287 | RETURN(); |
330 | 288 | } |
331 | 289 | |
332 | -void OPPROTO op_neg_T0(void) | |
333 | -{ | |
334 | - T0 = -T0; | |
335 | - RETURN(); | |
336 | -} | |
337 | - | |
338 | 290 | void OPPROTO op_negc_T0(void) |
339 | 291 | { |
340 | 292 | helper_negc_T0(); |
... | ... | @@ -508,42 +460,6 @@ void OPPROTO op_shlr_Rn(void) |
508 | 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 | 463 | void OPPROTO op_fmov_frN_FT0(void) |
548 | 464 | { |
549 | 465 | FT0 = env->fregs[PARAM1]; |
... | ... | @@ -736,120 +652,6 @@ void OPPROTO op_fmov_T0_frN(void) |
736 | 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 | 655 | void OPPROTO op_dt_rN(void) |
854 | 656 | { |
855 | 657 | cond_t((--env->gregs[PARAM1]) == 0); |
... | ... | @@ -908,24 +710,6 @@ void OPPROTO op_addl_GBR_T0(void) |
908 | 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 | 713 | void OPPROTO op_tst_imm_T0(void) |
930 | 714 | { |
931 | 715 | cond_t((T0 & PARAM1) == 0); | ... | ... |
target-sh4/translate.c
... | ... | @@ -70,7 +70,7 @@ static void sh4_translate_init(void) |
70 | 70 | { |
71 | 71 | int i; |
72 | 72 | static int done_init = 0; |
73 | - static const char * const gregnames[24] = { | |
73 | + static const char * const gregnames[24] = { | |
74 | 74 | "R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0", |
75 | 75 | "R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0", |
76 | 76 | "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15", |
... | ... | @@ -344,12 +344,12 @@ void _decode_opc(DisasContext * ctx) |
344 | 344 | case 0x1000: /* mov.l Rm,@(disp,Rn) */ |
345 | 345 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
346 | 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 | 348 | gen_op_stl_T0_T1(ctx); |
349 | 349 | return; |
350 | 350 | case 0x5000: /* mov.l @(disp,Rm),Rn */ |
351 | 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 | 353 | gen_op_ldl_T0_T0(ctx); |
354 | 354 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
355 | 355 | return; |
... | ... | @@ -367,7 +367,7 @@ void _decode_opc(DisasContext * ctx) |
367 | 367 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
368 | 368 | return; |
369 | 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 | 371 | return; |
372 | 372 | case 0xa000: /* bra disp */ |
373 | 373 | CHECK_NOT_DELAY_SLOT |
... | ... | @@ -419,104 +419,119 @@ void _decode_opc(DisasContext * ctx) |
419 | 419 | return; |
420 | 420 | case 0x2004: /* mov.b Rm,@-Rn */ |
421 | 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 | 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 | 430 | return; |
428 | 431 | case 0x2005: /* mov.w Rm,@-Rn */ |
429 | 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 | 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 | 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 | 441 | return; |
436 | 442 | case 0x2006: /* mov.l Rm,@-Rn */ |
437 | 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 | 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 | 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 | 452 | return; |
444 | 453 | case 0x6004: /* mov.b @Rm+,Rn */ |
445 | 454 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
446 | 455 | gen_op_ldb_T0_T0(ctx); |
447 | 456 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
448 | 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 | 460 | return; |
451 | 461 | case 0x6005: /* mov.w @Rm+,Rn */ |
452 | 462 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
453 | 463 | gen_op_ldw_T0_T0(ctx); |
454 | 464 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
455 | 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 | 468 | return; |
458 | 469 | case 0x6006: /* mov.l @Rm+,Rn */ |
459 | 470 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
460 | 471 | gen_op_ldl_T0_T0(ctx); |
461 | 472 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
462 | 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 | 476 | return; |
465 | 477 | case 0x0004: /* mov.b Rm,@(R0,Rn) */ |
466 | 478 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
467 | 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 | 481 | gen_op_stb_T0_T1(ctx); |
470 | 482 | return; |
471 | 483 | case 0x0005: /* mov.w Rm,@(R0,Rn) */ |
472 | 484 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
473 | 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 | 487 | gen_op_stw_T0_T1(ctx); |
476 | 488 | return; |
477 | 489 | case 0x0006: /* mov.l Rm,@(R0,Rn) */ |
478 | 490 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
479 | 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 | 493 | gen_op_stl_T0_T1(ctx); |
482 | 494 | return; |
483 | 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 | 497 | gen_op_ldb_T0_T0(ctx); |
487 | 498 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
488 | 499 | return; |
489 | 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 | 502 | gen_op_ldw_T0_T0(ctx); |
493 | 503 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
494 | 504 | return; |
495 | 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 | 507 | gen_op_ldl_T0_T0(ctx); |
499 | 508 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
500 | 509 | return; |
501 | 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 | 518 | return; |
506 | 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 | 525 | return; |
511 | 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 | 532 | return; |
517 | 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 | 535 | return; |
521 | 536 | case 0x300e: /* addc Rm,Rn */ |
522 | 537 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -531,8 +546,7 @@ void _decode_opc(DisasContext * ctx) |
531 | 546 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); |
532 | 547 | return; |
533 | 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 | 550 | return; |
537 | 551 | case 0x3000: /* cmp/eq Rm,Rn */ |
538 | 552 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -614,8 +628,8 @@ void _decode_opc(DisasContext * ctx) |
614 | 628 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
615 | 629 | gen_op_ldl_T0_T0(ctx); |
616 | 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 | 633 | return; |
620 | 634 | case 0x400f: /* mac.w @Rm+,@Rn+ */ |
621 | 635 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
... | ... | @@ -624,8 +638,8 @@ void _decode_opc(DisasContext * ctx) |
624 | 638 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
625 | 639 | gen_op_ldl_T0_T0(ctx); |
626 | 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 | 643 | return; |
630 | 644 | case 0x0007: /* mul.l Rm,Rn */ |
631 | 645 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -649,9 +663,7 @@ void _decode_opc(DisasContext * ctx) |
649 | 663 | gen_op_muluw_T0_T1(); |
650 | 664 | return; |
651 | 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 | 667 | return; |
656 | 668 | case 0x600a: /* negc Rm,Rn */ |
657 | 669 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -659,13 +671,10 @@ void _decode_opc(DisasContext * ctx) |
659 | 671 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
660 | 672 | return; |
661 | 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 | 675 | return; |
666 | 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 | 678 | return; |
670 | 679 | case 0x400c: /* shad Rm,Rn */ |
671 | 680 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -680,8 +689,7 @@ void _decode_opc(DisasContext * ctx) |
680 | 689 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[1]); |
681 | 690 | return; |
682 | 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 | 693 | return; |
686 | 694 | case 0x300a: /* subc Rm,Rn */ |
687 | 695 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
... | ... | @@ -701,8 +709,7 @@ void _decode_opc(DisasContext * ctx) |
701 | 709 | gen_op_tst_T0_T1(); |
702 | 710 | return; |
703 | 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 | 713 | return; |
707 | 714 | case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ |
708 | 715 | if (ctx->fpscr & FPSCR_SZ) { |
... | ... | @@ -740,40 +747,39 @@ void _decode_opc(DisasContext * ctx) |
740 | 747 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
741 | 748 | gen_op_ldfq_T0_DT0(ctx); |
742 | 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 | 752 | } else { |
745 | 753 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); |
746 | 754 | gen_op_ldfl_T0_FT0(ctx); |
747 | 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 | 759 | return; |
751 | 760 | case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ |
752 | 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 | 763 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
755 | 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 | 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 | 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 | 770 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
762 | 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 | 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 | 776 | return; |
768 | 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 | 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 | 780 | gen_op_ldfq_T0_DT0(ctx); |
773 | 781 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
774 | 782 | } else { |
775 | - tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B7_4)]); | |
776 | - gen_op_add_rN_T0(REG(0)); | |
777 | 783 | gen_op_ldfl_T0_FT0(ctx); |
778 | 784 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
779 | 785 | } |
... | ... | @@ -782,12 +788,12 @@ void _decode_opc(DisasContext * ctx) |
782 | 788 | if (ctx->fpscr & FPSCR_SZ) { |
783 | 789 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
784 | 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 | 792 | gen_op_stfq_DT0_T1(ctx); |
787 | 793 | } else { |
788 | 794 | gen_op_fmov_frN_FT0(FREG(B7_4)); |
789 | 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 | 797 | gen_op_stfl_FT0_T1(ctx); |
792 | 798 | } |
793 | 799 | return; |
... | ... | @@ -840,14 +846,14 @@ void _decode_opc(DisasContext * ctx) |
840 | 846 | |
841 | 847 | switch (ctx->opcode & 0xff00) { |
842 | 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 | 850 | return; |
845 | 851 | case 0xcd00: /* and.b #imm,@(R0,GBR) */ |
846 | 852 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
847 | 853 | gen_op_addl_GBR_T0(); |
848 | 854 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
849 | 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 | 857 | gen_op_stb_T0_T1(ctx); |
852 | 858 | return; |
853 | 859 | case 0x8b00: /* bf label */ |
... | ... | @@ -878,39 +884,39 @@ void _decode_opc(DisasContext * ctx) |
878 | 884 | return; |
879 | 885 | case 0xc400: /* mov.b @(disp,GBR),R0 */ |
880 | 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 | 888 | gen_op_ldb_T0_T0(ctx); |
883 | 889 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
884 | 890 | return; |
885 | 891 | case 0xc500: /* mov.w @(disp,GBR),R0 */ |
886 | 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 | 894 | gen_op_ldw_T0_T0(ctx); |
889 | 895 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
890 | 896 | return; |
891 | 897 | case 0xc600: /* mov.l @(disp,GBR),R0 */ |
892 | 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 | 900 | gen_op_ldl_T0_T0(ctx); |
895 | 901 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
896 | 902 | return; |
897 | 903 | case 0xc000: /* mov.b R0,@(disp,GBR) */ |
898 | 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 | 906 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
901 | 907 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
902 | 908 | gen_op_stb_T0_T1(ctx); |
903 | 909 | return; |
904 | 910 | case 0xc100: /* mov.w R0,@(disp,GBR) */ |
905 | 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 | 913 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
908 | 914 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
909 | 915 | gen_op_stw_T0_T1(ctx); |
910 | 916 | return; |
911 | 917 | case 0xc200: /* mov.l R0,@(disp,GBR) */ |
912 | 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 | 920 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
915 | 921 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
916 | 922 | gen_op_stl_T0_T1(ctx); |
... | ... | @@ -918,24 +924,24 @@ void _decode_opc(DisasContext * ctx) |
918 | 924 | case 0x8000: /* mov.b R0,@(disp,Rn) */ |
919 | 925 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
920 | 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 | 928 | gen_op_stb_T0_T1(ctx); |
923 | 929 | return; |
924 | 930 | case 0x8100: /* mov.w R0,@(disp,Rn) */ |
925 | 931 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
926 | 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 | 934 | gen_op_stw_T0_T1(ctx); |
929 | 935 | return; |
930 | 936 | case 0x8400: /* mov.b @(disp,Rn),R0 */ |
931 | 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 | 939 | gen_op_ldb_T0_T0(ctx); |
934 | 940 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
935 | 941 | return; |
936 | 942 | case 0x8500: /* mov.w @(disp,Rn),R0 */ |
937 | 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 | 945 | gen_op_ldw_T0_T0(ctx); |
940 | 946 | tcg_gen_mov_i32(cpu_gregs[REG(0)], cpu_T[0]); |
941 | 947 | return; |
... | ... | @@ -944,14 +950,14 @@ void _decode_opc(DisasContext * ctx) |
944 | 950 | ((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3); |
945 | 951 | return; |
946 | 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 | 954 | return; |
949 | 955 | case 0xcf00: /* or.b #imm,@(R0,GBR) */ |
950 | 956 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
951 | 957 | gen_op_addl_GBR_T0(); |
952 | 958 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
953 | 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 | 961 | gen_op_stb_T0_T1(ctx); |
956 | 962 | return; |
957 | 963 | case 0xc300: /* trapa #imm */ |
... | ... | @@ -969,14 +975,14 @@ void _decode_opc(DisasContext * ctx) |
969 | 975 | gen_op_tst_imm_T0(B7_0); |
970 | 976 | return; |
971 | 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 | 979 | return; |
974 | 980 | case 0xce00: /* xor.b #imm,@(R0,GBR) */ |
975 | 981 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(0)]); |
976 | 982 | gen_op_addl_GBR_T0(); |
977 | 983 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
978 | 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 | 986 | gen_op_stb_T0_T1(ctx); |
981 | 987 | return; |
982 | 988 | } |
... | ... | @@ -990,19 +996,19 @@ void _decode_opc(DisasContext * ctx) |
990 | 996 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
991 | 997 | gen_op_ldl_T0_T0(ctx); |
992 | 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 | 1000 | return; |
995 | 1001 | case 0x0082: /* stc Rm_BANK,Rn */ |
996 | 1002 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[ALTREG(B6_4)]); |
997 | 1003 | tcg_gen_mov_i32(cpu_gregs[REG(B11_8)], cpu_T[0]); |
998 | 1004 | return; |
999 | 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 | 1007 | tcg_gen_mov_i32(cpu_T[1], cpu_gregs[REG(B11_8)]); |
1002 | 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 | 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 | 1012 | return; |
1007 | 1013 | } |
1008 | 1014 | |
... | ... | @@ -1051,7 +1057,8 @@ void _decode_opc(DisasContext * ctx) |
1051 | 1057 | case ldpnum: \ |
1052 | 1058 | tcg_gen_mov_i32 (cpu_T[0], cpu_gregs[REG(B11_8)]); \ |
1053 | 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 | 1062 | gen_op_##ldop##_T0_##reg (); \ |
1056 | 1063 | extrald \ |
1057 | 1064 | return; \ |
... | ... | @@ -1061,11 +1068,14 @@ void _decode_opc(DisasContext * ctx) |
1061 | 1068 | return; \ |
1062 | 1069 | case stpnum: \ |
1063 | 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 | 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 | 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 | 1079 | return; |
1070 | 1080 | LDST(sr, 0x400e, 0x4007, ldc, 0x0002, 0x4003, stc, ctx->bstate = |
1071 | 1081 | BS_STOP;) |
... | ... | @@ -1125,29 +1135,29 @@ void _decode_opc(DisasContext * ctx) |
1125 | 1135 | gen_op_shlr_Rn(REG(B11_8)); |
1126 | 1136 | return; |
1127 | 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 | 1139 | return; |
1130 | 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 | 1142 | return; |
1133 | 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 | 1145 | return; |
1136 | 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 | 1148 | return; |
1139 | 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 | 1151 | return; |
1142 | 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 | 1154 | return; |
1145 | 1155 | case 0x401b: /* tas.b @Rn */ |
1146 | 1156 | tcg_gen_mov_i32(cpu_T[0], cpu_gregs[REG(B11_8)]); |
1147 | 1157 | tcg_gen_mov_i32(cpu_T[0], cpu_T[1]); |
1148 | 1158 | gen_op_ldub_T0_T0(ctx); |
1149 | 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 | 1161 | gen_op_stb_T0_T1(ctx); |
1152 | 1162 | return; |
1153 | 1163 | case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ | ... | ... |