Commit dfaa85834f5b9eac62bd0c8e951b309d9bafc66b

Authored by aurel32
1 parent 01ff9cc8

target-alpha: instruction decoding simplification

Use a litteral value of 0 when rb31 is used. This reduces the tests
in the instruction decoding. Also remove almost unused corner cases.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5250 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 134 additions and 234 deletions
target-alpha/translate.c
@@ -378,10 +378,8 @@ static always_inline void gen_arith3 (DisasContext *ctx, @@ -378,10 +378,8 @@ static always_inline void gen_arith3 (DisasContext *ctx,
378 tcg_gen_movi_i64(cpu_T[0], 0); 378 tcg_gen_movi_i64(cpu_T[0], 0);
379 if (islit) 379 if (islit)
380 tcg_gen_movi_i64(cpu_T[1], lit); 380 tcg_gen_movi_i64(cpu_T[1], lit);
381 - else if (rb != 31)  
382 - tcg_gen_mov_i64(cpu_T[1], cpu_ir[rb]);  
383 else 381 else
384 - tcg_gen_movi_i64(cpu_T[1], 0); 382 + tcg_gen_mov_i64(cpu_T[1], cpu_ir[rb]);
385 (*gen_arith_op)(); 383 (*gen_arith_op)();
386 if (rc != 31) 384 if (rc != 31)
387 tcg_gen_mov_i64(cpu_ir[rc], cpu_T[0]); 385 tcg_gen_mov_i64(cpu_ir[rc], cpu_T[0]);
@@ -416,10 +414,8 @@ static always_inline void gen_cmov (DisasContext *ctx, @@ -416,10 +414,8 @@ static always_inline void gen_cmov (DisasContext *ctx,
416 414
417 if (islit) 415 if (islit)
418 tcg_gen_movi_i64(cpu_ir[rc], lit); 416 tcg_gen_movi_i64(cpu_ir[rc], lit);
419 - else if (rb != 31)  
420 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
421 else 417 else
422 - tcg_gen_movi_i64(cpu_ir[rc], 0); 418 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
423 gen_set_label(l1); 419 gen_set_label(l1);
424 } 420 }
425 421
@@ -483,9 +479,12 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -483,9 +479,12 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
483 return; 479 return;
484 480
485 if (ra != 31) { 481 if (ra != 31) {
486 - if (islit)  
487 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 64 - ((lit & 7) * 8));  
488 - else if (rb != 31) { 482 + if (islit) {
  483 + if (lit != 0)
  484 + tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 64 - ((lit & 7) * 8));
  485 + else
  486 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]);
  487 + } else {
489 TCGv tmp1, tmp2; 488 TCGv tmp1, tmp2;
490 tmp1 = tcg_temp_new(TCG_TYPE_I64); 489 tmp1 = tcg_temp_new(TCG_TYPE_I64);
491 tcg_gen_andi_i64(tmp1, cpu_ir[rb], 7); 490 tcg_gen_andi_i64(tmp1, cpu_ir[rb], 7);
@@ -493,14 +492,11 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -493,14 +492,11 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
493 tmp2 = tcg_const_i64(64); 492 tmp2 = tcg_const_i64(64);
494 tcg_gen_sub_i64(tmp1, tmp2, tmp1); 493 tcg_gen_sub_i64(tmp1, tmp2, tmp1);
495 tcg_temp_free(tmp2); 494 tcg_temp_free(tmp2);
496 - if (tcg_gen_ext_i64) {  
497 - tcg_gen_shl_i64(tmp1, cpu_ir[ra], tmp1);  
498 - tcg_gen_ext_i64(cpu_ir[rc], tmp1);  
499 - } else  
500 - tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], tmp1); 495 + tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], tmp1);
501 tcg_temp_free(tmp1); 496 tcg_temp_free(tmp1);
502 - } else  
503 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 497 + }
  498 + if (tcg_gen_ext_i64)
  499 + tcg_gen_ext_i64(cpu_ir[rc], cpu_ir[rc]);
504 } else 500 } else
505 tcg_gen_movi_i64(cpu_ir[rc], 0); 501 tcg_gen_movi_i64(cpu_ir[rc], 0);
506 } 502 }
@@ -514,20 +510,17 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -514,20 +510,17 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
514 return; 510 return;
515 511
516 if (ra != 31) { 512 if (ra != 31) {
517 - if (islit)  
518 - tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], (lit & 7) * 8);  
519 - else if (rb != 31) { 513 + if (islit) {
  514 + tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], (lit & 7) * 8);
  515 + } else {
520 TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 516 TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
521 tcg_gen_andi_i64(tmp, cpu_ir[rb], 7); 517 tcg_gen_andi_i64(tmp, cpu_ir[rb], 7);
522 tcg_gen_shli_i64(tmp, tmp, 3); 518 tcg_gen_shli_i64(tmp, tmp, 3);
523 - if (tcg_gen_ext_i64) {  
524 - tcg_gen_shr_i64(tmp, cpu_ir[ra], tmp);  
525 - tcg_gen_ext_i64(cpu_ir[rc], tmp);  
526 - } else  
527 - tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], tmp); 519 + tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], tmp);
528 tcg_temp_free(tmp); 520 tcg_temp_free(tmp);
529 - } else  
530 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 521 + }
  522 + if (tcg_gen_ext_i64)
  523 + tcg_gen_ext_i64(cpu_ir[rc], cpu_ir[rc]);
531 } else 524 } else
532 tcg_gen_movi_i64(cpu_ir[rc], 0); 525 tcg_gen_movi_i64(cpu_ir[rc], 0);
533 } 526 }
@@ -547,12 +540,8 @@ static always_inline void gen_byte_manipulation(void *helper, @@ -547,12 +540,8 @@ static always_inline void gen_byte_manipulation(void *helper,
547 return; 540 return;
548 541
549 if (ra != 31) { 542 if (ra != 31) {
550 - if (islit || rb == 31) {  
551 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
552 - if (islit)  
553 - tcg_gen_movi_i64(tmp, lit);  
554 - else  
555 - tcg_gen_movi_i64(tmp, 0); 543 + if (islit) {
  544 + TCGv tmp = tcg_const_i64(lit);
556 tcg_gen_helper_1_2(helper, cpu_ir[rc], cpu_ir[ra], tmp); 545 tcg_gen_helper_1_2(helper, cpu_ir[rc], cpu_ir[ra], tmp);
557 tcg_temp_free(tmp); 546 tcg_temp_free(tmp);
558 } else 547 } else
@@ -581,10 +570,8 @@ static always_inline void gen_cmp(TCGCond cond, @@ -581,10 +570,8 @@ static always_inline void gen_cmp(TCGCond cond,
581 tmp = tcg_const_i64(0); 570 tmp = tcg_const_i64(0);
582 if (islit) 571 if (islit)
583 tcg_gen_brcondi_i64(cond, tmp, lit, l1); 572 tcg_gen_brcondi_i64(cond, tmp, lit, l1);
584 - else if (rb != 31)  
585 - tcg_gen_brcond_i64(cond, tmp, cpu_ir[rb], l1);  
586 else 573 else
587 - tcg_gen_brcondi_i64(cond, tmp, 0, l1); 574 + tcg_gen_brcond_i64(cond, tmp, cpu_ir[rb], l1);
588 575
589 tcg_gen_movi_i64(cpu_ir[rc], 0); 576 tcg_gen_movi_i64(cpu_ir[rc], 0);
590 tcg_gen_br(l2); 577 tcg_gen_br(l2);
@@ -609,7 +596,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -609,7 +596,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
609 rc = insn & 0x1F; 596 rc = insn & 0x1F;
610 sbz = (insn >> 13) & 0x07; 597 sbz = (insn >> 13) & 0x07;
611 islit = (insn >> 12) & 1; 598 islit = (insn >> 12) & 1;
612 - lit = (insn >> 13) & 0xFF; 599 + if (rb == 31 && !islit) {
  600 + islit = 1;
  601 + lit = 0;
  602 + } else
  603 + lit = (insn >> 13) & 0xFF;
613 palcode = insn & 0x03FFFFFF; 604 palcode = insn & 0x03FFFFFF;
614 disp21 = ((int32_t)((insn & 0x001FFFFF) << 11)) >> 11; 605 disp21 = ((int32_t)((insn & 0x001FFFFF) << 11)) >> 11;
615 disp16 = (int16_t)(insn & 0x0000FFFF); 606 disp16 = (int16_t)(insn & 0x0000FFFF);
@@ -726,18 +717,15 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -726,18 +717,15 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
726 if (islit) { 717 if (islit) {
727 tcg_gen_addi_i64(cpu_ir[rc], cpu_ir[ra], lit); 718 tcg_gen_addi_i64(cpu_ir[rc], cpu_ir[ra], lit);
728 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); 719 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
729 - } else if (rb != 31) { 720 + } else {
730 tcg_gen_add_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); 721 tcg_gen_add_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
731 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); 722 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
732 - } else  
733 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[ra]); 723 + }
734 } else { 724 } else {
735 if (islit) 725 if (islit)
736 - tcg_gen_movi_i64(cpu_ir[rc], (int32_t)lit);  
737 - else if (rb != 31)  
738 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]); 726 + tcg_gen_movi_i64(cpu_ir[rc], lit);
739 else 727 else
740 - tcg_gen_movi_i64(cpu_ir[rc], 0); 728 + tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]);
741 } 729 }
742 } 730 }
743 break; 731 break;
@@ -745,26 +733,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -745,26 +733,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
745 /* S4ADDL */ 733 /* S4ADDL */
746 if (likely(rc != 31)) { 734 if (likely(rc != 31)) {
747 if (ra != 31) { 735 if (ra != 31) {
748 - if (islit || rb != 31) {  
749 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
750 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);  
751 - if (islit)  
752 - tcg_gen_addi_i64(tmp, tmp, lit);  
753 - else  
754 - tcg_gen_add_i64(tmp, tmp, cpu_ir[rb]);  
755 - tcg_gen_ext32s_i64(cpu_ir[rc], tmp);  
756 - tcg_temp_free(tmp);  
757 - } else {  
758 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 2);  
759 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
760 - } 736 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  737 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
  738 + if (islit)
  739 + tcg_gen_addi_i64(tmp, tmp, lit);
  740 + else
  741 + tcg_gen_add_i64(tmp, tmp, cpu_ir[rb]);
  742 + tcg_gen_ext32s_i64(cpu_ir[rc], tmp);
  743 + tcg_temp_free(tmp);
761 } else { 744 } else {
762 if (islit) 745 if (islit)
763 tcg_gen_movi_i64(cpu_ir[rc], lit); 746 tcg_gen_movi_i64(cpu_ir[rc], lit);
764 - else if (rb != 31)  
765 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]);  
766 else 747 else
767 - tcg_gen_movi_i64(cpu_ir[rc], 0); 748 + tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]);
768 } 749 }
769 } 750 }
770 break; 751 break;
@@ -772,22 +753,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -772,22 +753,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
772 /* SUBL */ 753 /* SUBL */
773 if (likely(rc != 31)) { 754 if (likely(rc != 31)) {
774 if (ra != 31) { 755 if (ra != 31) {
775 - if (islit) { 756 + if (islit)
776 tcg_gen_subi_i64(cpu_ir[rc], cpu_ir[ra], lit); 757 tcg_gen_subi_i64(cpu_ir[rc], cpu_ir[ra], lit);
777 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
778 - } else if (rb != 31) { 758 + else
779 tcg_gen_sub_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); 759 tcg_gen_sub_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
780 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
781 - } else  
782 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[ra]); 760 + tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
783 } else { 761 } else {
784 if (islit) 762 if (islit)
785 tcg_gen_movi_i64(cpu_ir[rc], -lit); 763 tcg_gen_movi_i64(cpu_ir[rc], -lit);
786 - else if (rb != 31) { 764 + else {
787 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]); 765 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
788 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); 766 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
789 - } else  
790 - tcg_gen_movi_i64(cpu_ir[rc], 0);  
791 } 767 }
792 } 768 }
793 break; 769 break;
@@ -795,27 +771,21 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -795,27 +771,21 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
795 /* S4SUBL */ 771 /* S4SUBL */
796 if (likely(rc != 31)) { 772 if (likely(rc != 31)) {
797 if (ra != 31) { 773 if (ra != 31) {
798 - if (islit || rb != 31) {  
799 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
800 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);  
801 - if (islit)  
802 - tcg_gen_subi_i64(tmp, tmp, lit);  
803 - else  
804 - tcg_gen_sub_i64(tmp, tmp, cpu_ir[rb]);  
805 - tcg_gen_ext32s_i64(cpu_ir[rc], tmp);  
806 - tcg_temp_free(tmp);  
807 - } else {  
808 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 2);  
809 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
810 - } 774 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  775 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
  776 + if (islit)
  777 + tcg_gen_subi_i64(tmp, tmp, lit);
  778 + else
  779 + tcg_gen_sub_i64(tmp, tmp, cpu_ir[rb]);
  780 + tcg_gen_ext32s_i64(cpu_ir[rc], tmp);
  781 + tcg_temp_free(tmp);
811 } else { 782 } else {
812 if (islit) 783 if (islit)
813 tcg_gen_movi_i64(cpu_ir[rc], -lit); 784 tcg_gen_movi_i64(cpu_ir[rc], -lit);
814 - else if (rb != 31) { 785 + else {
815 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]); 786 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
816 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); 787 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
817 - } else  
818 - tcg_gen_movi_i64(cpu_ir[rc], 0); 788 + }
819 } 789 }
820 } 790 }
821 break; 791 break;
@@ -827,26 +797,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -827,26 +797,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
827 /* S8ADDL */ 797 /* S8ADDL */
828 if (likely(rc != 31)) { 798 if (likely(rc != 31)) {
829 if (ra != 31) { 799 if (ra != 31) {
830 - if (islit || rb != 31) {  
831 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
832 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);  
833 - if (islit)  
834 - tcg_gen_addi_i64(tmp, tmp, lit);  
835 - else  
836 - tcg_gen_add_i64(tmp, tmp, cpu_ir[rb]);  
837 - tcg_gen_ext32s_i64(cpu_ir[rc], tmp);  
838 - tcg_temp_free(tmp);  
839 - } else {  
840 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 3);  
841 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
842 - } 800 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  801 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
  802 + if (islit)
  803 + tcg_gen_addi_i64(tmp, tmp, lit);
  804 + else
  805 + tcg_gen_add_i64(tmp, tmp, cpu_ir[rb]);
  806 + tcg_gen_ext32s_i64(cpu_ir[rc], tmp);
  807 + tcg_temp_free(tmp);
843 } else { 808 } else {
844 if (islit) 809 if (islit)
845 tcg_gen_movi_i64(cpu_ir[rc], lit); 810 tcg_gen_movi_i64(cpu_ir[rc], lit);
846 - else if (rb != 31)  
847 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]);  
848 else 811 else
849 - tcg_gen_movi_i64(cpu_ir[rc], 0); 812 + tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rb]);
850 } 813 }
851 } 814 }
852 break; 815 break;
@@ -854,27 +817,21 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -854,27 +817,21 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
854 /* S8SUBL */ 817 /* S8SUBL */
855 if (likely(rc != 31)) { 818 if (likely(rc != 31)) {
856 if (ra != 31) { 819 if (ra != 31) {
857 - if (islit || rb != 31) {  
858 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
859 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);  
860 - if (islit)  
861 - tcg_gen_subi_i64(tmp, tmp, lit);  
862 - else  
863 - tcg_gen_sub_i64(tmp, tmp, cpu_ir[rb]);  
864 - tcg_gen_ext32s_i64(cpu_ir[rc], tmp);  
865 - tcg_temp_free(tmp);  
866 - } else {  
867 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 3);  
868 - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);  
869 - } 820 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  821 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
  822 + if (islit)
  823 + tcg_gen_subi_i64(tmp, tmp, lit);
  824 + else
  825 + tcg_gen_sub_i64(tmp, tmp, cpu_ir[rb]);
  826 + tcg_gen_ext32s_i64(cpu_ir[rc], tmp);
  827 + tcg_temp_free(tmp);
870 } else { 828 } else {
871 if (islit) 829 if (islit)
872 tcg_gen_movi_i64(cpu_ir[rc], -lit); 830 tcg_gen_movi_i64(cpu_ir[rc], -lit);
873 - else if (rb != 31) { 831 + else
874 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]); 832 tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
875 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); 833 tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]);
876 - } else  
877 - tcg_gen_movi_i64(cpu_ir[rc], 0); 834 + }
878 } 835 }
879 } 836 }
880 break; 837 break;
@@ -888,17 +845,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -888,17 +845,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
888 if (ra != 31) { 845 if (ra != 31) {
889 if (islit) 846 if (islit)
890 tcg_gen_addi_i64(cpu_ir[rc], cpu_ir[ra], lit); 847 tcg_gen_addi_i64(cpu_ir[rc], cpu_ir[ra], lit);
891 - else if (rb != 31)  
892 - tcg_gen_add_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);  
893 else 848 else
894 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 849 + tcg_gen_add_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
895 } else { 850 } else {
896 if (islit) 851 if (islit)
897 tcg_gen_movi_i64(cpu_ir[rc], lit); 852 tcg_gen_movi_i64(cpu_ir[rc], lit);
898 - else if (rb != 31)  
899 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
900 else 853 else
901 - tcg_gen_movi_i64(cpu_ir[rc], 0); 854 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
902 } 855 }
903 } 856 }
904 break; 857 break;
@@ -906,23 +859,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -906,23 +859,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
906 /* S4ADDQ */ 859 /* S4ADDQ */
907 if (likely(rc != 31)) { 860 if (likely(rc != 31)) {
908 if (ra != 31) { 861 if (ra != 31) {
909 - if (islit || rb != 31) {  
910 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
911 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);  
912 - if (islit)  
913 - tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);  
914 - else  
915 - tcg_gen_add_i64(cpu_ir[rc], tmp, cpu_ir[rb]);  
916 - tcg_temp_free(tmp);  
917 - } else  
918 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 2); 862 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  863 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
  864 + if (islit)
  865 + tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);
  866 + else
  867 + tcg_gen_add_i64(cpu_ir[rc], tmp, cpu_ir[rb]);
  868 + tcg_temp_free(tmp);
919 } else { 869 } else {
920 if (islit) 870 if (islit)
921 tcg_gen_movi_i64(cpu_ir[rc], lit); 871 tcg_gen_movi_i64(cpu_ir[rc], lit);
922 - else if (rb != 31)  
923 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
924 else 872 else
925 - tcg_gen_movi_i64(cpu_ir[rc], 0); 873 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
926 } 874 }
927 } 875 }
928 break; 876 break;
@@ -932,17 +880,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -932,17 +880,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
932 if (ra != 31) { 880 if (ra != 31) {
933 if (islit) 881 if (islit)
934 tcg_gen_subi_i64(cpu_ir[rc], cpu_ir[ra], lit); 882 tcg_gen_subi_i64(cpu_ir[rc], cpu_ir[ra], lit);
935 - else if (rb != 31)  
936 - tcg_gen_sub_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);  
937 else 883 else
938 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 884 + tcg_gen_sub_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
939 } else { 885 } else {
940 if (islit) 886 if (islit)
941 tcg_gen_movi_i64(cpu_ir[rc], -lit); 887 tcg_gen_movi_i64(cpu_ir[rc], -lit);
942 - else if (rb != 31)  
943 - tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);  
944 else 888 else
945 - tcg_gen_movi_i64(cpu_ir[rc], 0); 889 + tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
946 } 890 }
947 } 891 }
948 break; 892 break;
@@ -950,23 +894,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -950,23 +894,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
950 /* S4SUBQ */ 894 /* S4SUBQ */
951 if (likely(rc != 31)) { 895 if (likely(rc != 31)) {
952 if (ra != 31) { 896 if (ra != 31) {
953 - if (islit || rb != 31) {  
954 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
955 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);  
956 - if (islit)  
957 - tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);  
958 - else  
959 - tcg_gen_sub_i64(cpu_ir[rc], tmp, cpu_ir[rb]);  
960 - tcg_temp_free(tmp);  
961 - } else  
962 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 2); 897 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  898 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
  899 + if (islit)
  900 + tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);
  901 + else
  902 + tcg_gen_sub_i64(cpu_ir[rc], tmp, cpu_ir[rb]);
  903 + tcg_temp_free(tmp);
963 } else { 904 } else {
964 if (islit) 905 if (islit)
965 tcg_gen_movi_i64(cpu_ir[rc], -lit); 906 tcg_gen_movi_i64(cpu_ir[rc], -lit);
966 - else if (rb != 31)  
967 - tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);  
968 else 907 else
969 - tcg_gen_movi_i64(cpu_ir[rc], 0); 908 + tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
970 } 909 }
971 } 910 }
972 break; 911 break;
@@ -978,23 +917,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -978,23 +917,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
978 /* S8ADDQ */ 917 /* S8ADDQ */
979 if (likely(rc != 31)) { 918 if (likely(rc != 31)) {
980 if (ra != 31) { 919 if (ra != 31) {
981 - if (islit || rb != 31) {  
982 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
983 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);  
984 - if (islit)  
985 - tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);  
986 - else  
987 - tcg_gen_add_i64(cpu_ir[rc], tmp, cpu_ir[rb]);  
988 - tcg_temp_free(tmp);  
989 - } else  
990 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 3); 920 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  921 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
  922 + if (islit)
  923 + tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);
  924 + else
  925 + tcg_gen_add_i64(cpu_ir[rc], tmp, cpu_ir[rb]);
  926 + tcg_temp_free(tmp);
991 } else { 927 } else {
992 if (islit) 928 if (islit)
993 tcg_gen_movi_i64(cpu_ir[rc], lit); 929 tcg_gen_movi_i64(cpu_ir[rc], lit);
994 - else if (rb != 31)  
995 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
996 else 930 else
997 - tcg_gen_movi_i64(cpu_ir[rc], 0); 931 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
998 } 932 }
999 } 933 }
1000 break; 934 break;
@@ -1002,23 +936,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1002,23 +936,18 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1002 /* S8SUBQ */ 936 /* S8SUBQ */
1003 if (likely(rc != 31)) { 937 if (likely(rc != 31)) {
1004 if (ra != 31) { 938 if (ra != 31) {
1005 - if (islit || rb != 31) {  
1006 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
1007 - tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);  
1008 - if (islit)  
1009 - tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);  
1010 - else  
1011 - tcg_gen_sub_i64(cpu_ir[rc], tmp, cpu_ir[rb]);  
1012 - tcg_temp_free(tmp);  
1013 - } else  
1014 - tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], 3); 939 + TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
  940 + tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
  941 + if (islit)
  942 + tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);
  943 + else
  944 + tcg_gen_sub_i64(cpu_ir[rc], tmp, cpu_ir[rb]);
  945 + tcg_temp_free(tmp);
1015 } else { 946 } else {
1016 if (islit) 947 if (islit)
1017 tcg_gen_movi_i64(cpu_ir[rc], -lit); 948 tcg_gen_movi_i64(cpu_ir[rc], -lit);
1018 - else if (rb != 31)  
1019 - tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);  
1020 else 949 else
1021 - tcg_gen_movi_i64(cpu_ir[rc], 0); 950 + tcg_gen_neg_i64(cpu_ir[rc], cpu_ir[rb]);
1022 } 951 }
1023 } 952 }
1024 break; 953 break;
@@ -1059,7 +988,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1059,7 +988,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1059 case 0x00: 988 case 0x00:
1060 /* AND */ 989 /* AND */
1061 if (likely(rc != 31)) { 990 if (likely(rc != 31)) {
1062 - if (ra == 31 || (rb == 31 && !islit)) 991 + if (ra == 31)
1063 tcg_gen_movi_i64(cpu_ir[rc], 0); 992 tcg_gen_movi_i64(cpu_ir[rc], 0);
1064 else if (islit) 993 else if (islit)
1065 tcg_gen_andi_i64(cpu_ir[rc], cpu_ir[ra], lit); 994 tcg_gen_andi_i64(cpu_ir[rc], cpu_ir[ra], lit);
@@ -1073,13 +1002,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1073,13 +1002,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1073 if (ra != 31) { 1002 if (ra != 31) {
1074 if (islit) 1003 if (islit)
1075 tcg_gen_andi_i64(cpu_ir[rc], cpu_ir[ra], ~lit); 1004 tcg_gen_andi_i64(cpu_ir[rc], cpu_ir[ra], ~lit);
1076 - else if (rb != 31) { 1005 + else {
1077 TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 1006 TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
1078 tcg_gen_not_i64(tmp, cpu_ir[rb]); 1007 tcg_gen_not_i64(tmp, cpu_ir[rb]);
1079 tcg_gen_and_i64(cpu_ir[rc], cpu_ir[ra], tmp); 1008 tcg_gen_and_i64(cpu_ir[rc], cpu_ir[ra], tmp);
1080 tcg_temp_free(tmp); 1009 tcg_temp_free(tmp);
1081 - } else  
1082 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1010 + }
1083 } else 1011 } else
1084 tcg_gen_movi_i64(cpu_ir[rc], 0); 1012 tcg_gen_movi_i64(cpu_ir[rc], 0);
1085 } 1013 }
@@ -1098,17 +1026,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1098,17 +1026,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1098 if (ra != 31) { 1026 if (ra != 31) {
1099 if (islit) 1027 if (islit)
1100 tcg_gen_ori_i64(cpu_ir[rc], cpu_ir[ra], lit); 1028 tcg_gen_ori_i64(cpu_ir[rc], cpu_ir[ra], lit);
1101 - else if (rb != 31) 1029 + else
1102 tcg_gen_or_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); 1030 tcg_gen_or_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
1103 - else  
1104 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]);  
1105 } else { 1031 } else {
1106 if (islit) 1032 if (islit)
1107 tcg_gen_movi_i64(cpu_ir[rc], lit); 1033 tcg_gen_movi_i64(cpu_ir[rc], lit);
1108 - else if (rb != 31)  
1109 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
1110 else 1034 else
1111 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1035 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
1112 } 1036 }
1113 } 1037 }
1114 break; 1038 break;
@@ -1123,9 +1047,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1123,9 +1047,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1123 case 0x28: 1047 case 0x28:
1124 /* ORNOT */ 1048 /* ORNOT */
1125 if (likely(rc != 31)) { 1049 if (likely(rc != 31)) {
1126 - if (rb == 31 && !islit)  
1127 - tcg_gen_movi_i64(cpu_ir[rc], ~0);  
1128 - else if (ra != 31) { 1050 + if (ra != 31) {
1129 if (islit) 1051 if (islit)
1130 tcg_gen_ori_i64(cpu_ir[rc], cpu_ir[ra], ~lit); 1052 tcg_gen_ori_i64(cpu_ir[rc], cpu_ir[ra], ~lit);
1131 else { 1053 else {
@@ -1148,17 +1070,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1148,17 +1070,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1148 if (ra != 31) { 1070 if (ra != 31) {
1149 if (islit) 1071 if (islit)
1150 tcg_gen_xori_i64(cpu_ir[rc], cpu_ir[ra], lit); 1072 tcg_gen_xori_i64(cpu_ir[rc], cpu_ir[ra], lit);
1151 - else if (rb != 31)  
1152 - tcg_gen_xor_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);  
1153 else 1073 else
1154 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1074 + tcg_gen_xor_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);
1155 } else { 1075 } else {
1156 if (islit) 1076 if (islit)
1157 tcg_gen_movi_i64(cpu_ir[rc], lit); 1077 tcg_gen_movi_i64(cpu_ir[rc], lit);
1158 - else if (rb != 31)  
1159 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);  
1160 else 1078 else
1161 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1079 + tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[rb]);
1162 } 1080 }
1163 } 1081 }
1164 break; 1082 break;
@@ -1176,20 +1094,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1176,20 +1094,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1176 if (ra != 31) { 1094 if (ra != 31) {
1177 if (islit) 1095 if (islit)
1178 tcg_gen_xori_i64(cpu_ir[rc], cpu_ir[ra], ~lit); 1096 tcg_gen_xori_i64(cpu_ir[rc], cpu_ir[ra], ~lit);
1179 - else if (rb != 31) { 1097 + else {
1180 TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 1098 TCGv tmp = tcg_temp_new(TCG_TYPE_I64);
1181 tcg_gen_not_i64(tmp, cpu_ir[rb]); 1099 tcg_gen_not_i64(tmp, cpu_ir[rb]);
1182 tcg_gen_xor_i64(cpu_ir[rc], cpu_ir[ra], tmp); 1100 tcg_gen_xor_i64(cpu_ir[rc], cpu_ir[ra], tmp);
1183 tcg_temp_free(tmp); 1101 tcg_temp_free(tmp);
1184 - } else  
1185 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1102 + }
1186 } else { 1103 } else {
1187 if (islit) 1104 if (islit)
1188 tcg_gen_movi_i64(cpu_ir[rc], ~lit); 1105 tcg_gen_movi_i64(cpu_ir[rc], ~lit);
1189 - else if (rb != 31)  
1190 - tcg_gen_not_i64(cpu_ir[rc], cpu_ir[rb]);  
1191 else 1106 else
1192 - tcg_gen_movi_i64(cpu_ir[rc], ~0); 1107 + tcg_gen_not_i64(cpu_ir[rc], cpu_ir[rb]);
1193 } 1108 }
1194 } 1109 }
1195 break; 1110 break;
@@ -1198,10 +1113,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1198,10 +1113,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1198 if (likely(rc != 31)) { 1113 if (likely(rc != 31)) {
1199 if (islit) 1114 if (islit)
1200 tcg_gen_movi_i64(cpu_ir[rc], helper_amask(lit)); 1115 tcg_gen_movi_i64(cpu_ir[rc], helper_amask(lit));
1201 - else if (rb != 31)  
1202 - tcg_gen_helper_1_1(helper_amask, cpu_ir[rc], cpu_ir[rb]);  
1203 else 1116 else
1204 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1117 + tcg_gen_helper_1_1(helper_amask, cpu_ir[rc], cpu_ir[rb]);
1205 } 1118 }
1206 break; 1119 break;
1207 case 0x64: 1120 case 0x64:
@@ -1277,13 +1190,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1277,13 +1190,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1277 if (ra != 31) { 1190 if (ra != 31) {
1278 if (islit) 1191 if (islit)
1279 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1192 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1280 - else if (rb != 31) { 1193 + else {
1281 TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1194 TCGv shift = tcg_temp_new(TCG_TYPE_I64);
1282 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1195 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1283 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], shift); 1196 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], shift);
1284 tcg_temp_free(shift); 1197 tcg_temp_free(shift);
1285 - } else  
1286 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1198 + }
1287 } else 1199 } else
1288 tcg_gen_movi_i64(cpu_ir[rc], 0); 1200 tcg_gen_movi_i64(cpu_ir[rc], 0);
1289 } 1201 }
@@ -1298,13 +1210,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1298,13 +1210,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1298 if (ra != 31) { 1210 if (ra != 31) {
1299 if (islit) 1211 if (islit)
1300 tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1212 tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1301 - else if (rb != 31) { 1213 + else {
1302 TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1214 TCGv shift = tcg_temp_new(TCG_TYPE_I64);
1303 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1215 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1304 tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], shift); 1216 tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], shift);
1305 tcg_temp_free(shift); 1217 tcg_temp_free(shift);
1306 - } else  
1307 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1218 + }
1308 } else 1219 } else
1309 tcg_gen_movi_i64(cpu_ir[rc], 0); 1220 tcg_gen_movi_i64(cpu_ir[rc], 0);
1310 } 1221 }
@@ -1319,13 +1230,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1319,13 +1230,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1319 if (ra != 31) { 1230 if (ra != 31) {
1320 if (islit) 1231 if (islit)
1321 tcg_gen_sari_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1232 tcg_gen_sari_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1322 - else if (rb != 31) { 1233 + else {
1323 TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1234 TCGv shift = tcg_temp_new(TCG_TYPE_I64);
1324 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1235 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1325 tcg_gen_sar_i64(cpu_ir[rc], cpu_ir[ra], shift); 1236 tcg_gen_sar_i64(cpu_ir[rc], cpu_ir[ra], shift);
1326 tcg_temp_free(shift); 1237 tcg_temp_free(shift);
1327 - } else  
1328 - tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 1238 + }
1329 } else 1239 } else
1330 tcg_gen_movi_i64(cpu_ir[rc], 0); 1240 tcg_gen_movi_i64(cpu_ir[rc], 0);
1331 } 1241 }
@@ -1375,7 +1285,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1375,7 +1285,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1375 case 0x00: 1285 case 0x00:
1376 /* MULL */ 1286 /* MULL */
1377 if (likely(rc != 31)) { 1287 if (likely(rc != 31)) {
1378 - if (ra == 31 || (rb == 31 && !islit)) 1288 + if (ra == 31)
1379 tcg_gen_movi_i64(cpu_ir[rc], 0); 1289 tcg_gen_movi_i64(cpu_ir[rc], 0);
1380 else { 1290 else {
1381 if (islit) 1291 if (islit)
@@ -1389,7 +1299,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1389,7 +1299,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1389 case 0x20: 1299 case 0x20:
1390 /* MULQ */ 1300 /* MULQ */
1391 if (likely(rc != 31)) { 1301 if (likely(rc != 31)) {
1392 - if (ra == 31 || (rb == 31 && !islit)) 1302 + if (ra == 31)
1393 tcg_gen_movi_i64(cpu_ir[rc], 0); 1303 tcg_gen_movi_i64(cpu_ir[rc], 0);
1394 else if (islit) 1304 else if (islit)
1395 tcg_gen_muli_i64(cpu_ir[rc], cpu_ir[ra], lit); 1305 tcg_gen_muli_i64(cpu_ir[rc], cpu_ir[ra], lit);
@@ -1908,10 +1818,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1908,10 +1818,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1908 if (likely(rc != 31)) { 1818 if (likely(rc != 31)) {
1909 if (islit) 1819 if (islit)
1910 tcg_gen_movi_i64(cpu_ir[rc], (int64_t)((int8_t)lit)); 1820 tcg_gen_movi_i64(cpu_ir[rc], (int64_t)((int8_t)lit));
1911 - else if (rb != 31)  
1912 - tcg_gen_ext8s_i64(cpu_ir[rc], cpu_ir[rb]);  
1913 else 1821 else
1914 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1822 + tcg_gen_ext8s_i64(cpu_ir[rc], cpu_ir[rb]);
1915 } 1823 }
1916 break; 1824 break;
1917 case 0x01: 1825 case 0x01:
@@ -1921,10 +1829,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1921,10 +1829,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1921 if (likely(rc != 31)) { 1829 if (likely(rc != 31)) {
1922 if (islit) 1830 if (islit)
1923 tcg_gen_movi_i64(cpu_ir[rc], (int64_t)((int16_t)lit)); 1831 tcg_gen_movi_i64(cpu_ir[rc], (int64_t)((int16_t)lit));
1924 - else if (rb != 31)  
1925 - tcg_gen_ext16s_i64(cpu_ir[rc], cpu_ir[rb]);  
1926 else 1832 else
1927 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1833 + tcg_gen_ext16s_i64(cpu_ir[rc], cpu_ir[rb]);
1928 } 1834 }
1929 break; 1835 break;
1930 case 0x30: 1836 case 0x30:
@@ -1934,10 +1840,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1934,10 +1840,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1934 if (likely(rc != 31)) { 1840 if (likely(rc != 31)) {
1935 if (islit) 1841 if (islit)
1936 tcg_gen_movi_i64(cpu_ir[rc], ctpop64(lit)); 1842 tcg_gen_movi_i64(cpu_ir[rc], ctpop64(lit));
1937 - else if (rb != 31)  
1938 - tcg_gen_helper_1_1(helper_ctpop, cpu_ir[rc], cpu_ir[rb]);  
1939 else 1843 else
1940 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1844 + tcg_gen_helper_1_1(helper_ctpop, cpu_ir[rc], cpu_ir[rb]);
1941 } 1845 }
1942 break; 1846 break;
1943 case 0x31: 1847 case 0x31:
@@ -1954,10 +1858,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1954,10 +1858,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1954 if (likely(rc != 31)) { 1858 if (likely(rc != 31)) {
1955 if (islit) 1859 if (islit)
1956 tcg_gen_movi_i64(cpu_ir[rc], clz64(lit)); 1860 tcg_gen_movi_i64(cpu_ir[rc], clz64(lit));
1957 - else if (rb != 31)  
1958 - tcg_gen_helper_1_1(helper_ctlz, cpu_ir[rc], cpu_ir[rb]);  
1959 else 1861 else
1960 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1862 + tcg_gen_helper_1_1(helper_ctlz, cpu_ir[rc], cpu_ir[rb]);
1961 } 1863 }
1962 break; 1864 break;
1963 case 0x33: 1865 case 0x33:
@@ -1967,10 +1869,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1967,10 +1869,8 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1967 if (likely(rc != 31)) { 1869 if (likely(rc != 31)) {
1968 if (islit) 1870 if (islit)
1969 tcg_gen_movi_i64(cpu_ir[rc], ctz64(lit)); 1871 tcg_gen_movi_i64(cpu_ir[rc], ctz64(lit));
1970 - else if (rb != 31)  
1971 - tcg_gen_helper_1_1(helper_cttz, cpu_ir[rc], cpu_ir[rb]);  
1972 else 1872 else
1973 - tcg_gen_movi_i64(cpu_ir[rc], 0); 1873 + tcg_gen_helper_1_1(helper_cttz, cpu_ir[rc], cpu_ir[rb]);
1974 } 1874 }
1975 break; 1875 break;
1976 case 0x34: 1876 case 0x34: