Commit 6359706f9384d9d50fbd0ba92df18d3da5d7ed96

Authored by aurel32
1 parent 0cfe58cd

tcg-ops.h: _i64 TCG immediate instructions cleanup

Move addi_i64, muli_i64 and subi_i64 out of #if TCG_TARGET_REG_BITS
as both implementations are strictly identical. Use the same
optimisation (ie when imm == 0) for addi_i64 and subi_64 than the
32-bit version.

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

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5598 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 31 additions and 42 deletions
tcg/tcg-op.h
@@ -673,26 +673,12 @@ static inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -673,26 +673,12 @@ static inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2)
673 arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2)); 673 arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2));
674 } 674 }
675 675
676 -static inline void tcg_gen_addi_i64(TCGv ret, TCGv arg1, int64_t arg2)  
677 -{  
678 - TCGv t0 = tcg_const_i64(arg2);  
679 - tcg_gen_add_i64(ret, arg1, t0);  
680 - tcg_temp_free(t0);  
681 -}  
682 -  
683 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2) 676 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
684 { 677 {
685 tcg_gen_op6(INDEX_op_sub2_i32, ret, TCGV_HIGH(ret), 678 tcg_gen_op6(INDEX_op_sub2_i32, ret, TCGV_HIGH(ret),
686 arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2)); 679 arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2));
687 } 680 }
688 681
689 -static inline void tcg_gen_subi_i64(TCGv ret, TCGv arg1, int64_t arg2)  
690 -{  
691 - TCGv t0 = tcg_const_i64(arg2);  
692 - tcg_gen_sub_i64(ret, arg1, t0);  
693 - tcg_temp_free(t0);  
694 -}  
695 -  
696 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2) 682 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
697 { 683 {
698 tcg_gen_and_i32(ret, arg1, arg2); 684 tcg_gen_and_i32(ret, arg1, arg2);
@@ -788,13 +774,6 @@ static inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -788,13 +774,6 @@ static inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2)
788 tcg_temp_free(t1); 774 tcg_temp_free(t1);
789 } 775 }
790 776
791 -static inline void tcg_gen_muli_i64(TCGv ret, TCGv arg1, int64_t arg2)  
792 -{  
793 - TCGv t0 = tcg_const_i64(arg2);  
794 - tcg_gen_mul_i64(ret, arg1, t0);  
795 - tcg_temp_free(t0);  
796 -}  
797 -  
798 static inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2) 777 static inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
799 { 778 {
800 tcg_gen_helper_1_2(tcg_helper_div_i64, ret, arg1, arg2); 779 tcg_gen_helper_1_2(tcg_helper_div_i64, ret, arg1, arg2);
@@ -897,25 +876,11 @@ static inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -897,25 +876,11 @@ static inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2)
897 tcg_gen_op3(INDEX_op_add_i64, ret, arg1, arg2); 876 tcg_gen_op3(INDEX_op_add_i64, ret, arg1, arg2);
898 } 877 }
899 878
900 -static inline void tcg_gen_addi_i64(TCGv ret, TCGv arg1, int64_t arg2)  
901 -{  
902 - TCGv t0 = tcg_const_i64(arg2);  
903 - tcg_gen_add_i64(ret, arg1, t0);  
904 - tcg_temp_free(t0);  
905 -}  
906 -  
907 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2) 879 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
908 { 880 {
909 tcg_gen_op3(INDEX_op_sub_i64, ret, arg1, arg2); 881 tcg_gen_op3(INDEX_op_sub_i64, ret, arg1, arg2);
910 } 882 }
911 883
912 -static inline void tcg_gen_subi_i64(TCGv ret, TCGv arg1, int64_t arg2)  
913 -{  
914 - TCGv t0 = tcg_const_i64(arg2);  
915 - tcg_gen_sub_i64(ret, arg1, t0);  
916 - tcg_temp_free(t0);  
917 -}  
918 -  
919 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2) 884 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
920 { 885 {
921 tcg_gen_op3(INDEX_op_and_i64, ret, arg1, arg2); 886 tcg_gen_op3(INDEX_op_and_i64, ret, arg1, arg2);
@@ -1011,13 +976,6 @@ static inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -1011,13 +976,6 @@ static inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2)
1011 tcg_gen_op3(INDEX_op_mul_i64, ret, arg1, arg2); 976 tcg_gen_op3(INDEX_op_mul_i64, ret, arg1, arg2);
1012 } 977 }
1013 978
1014 -static inline void tcg_gen_muli_i64(TCGv ret, TCGv arg1, int64_t arg2)  
1015 -{  
1016 - TCGv t0 = tcg_const_i64(arg2);  
1017 - tcg_gen_mul_i64(ret, arg1, t0);  
1018 - tcg_temp_free(t0);  
1019 -}  
1020 -  
1021 #ifdef TCG_TARGET_HAS_div_i64 979 #ifdef TCG_TARGET_HAS_div_i64
1022 static inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2) 980 static inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
1023 { 981 {
@@ -1078,6 +1036,18 @@ static inline void tcg_gen_remu_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -1078,6 +1036,18 @@ static inline void tcg_gen_remu_i64(TCGv ret, TCGv arg1, TCGv arg2)
1078 1036
1079 #endif 1037 #endif
1080 1038
  1039 +static inline void tcg_gen_addi_i64(TCGv ret, TCGv arg1, int64_t arg2)
  1040 +{
  1041 + /* some cases can be optimized here */
  1042 + if (arg2 == 0) {
  1043 + tcg_gen_mov_i64(ret, arg1);
  1044 + } else {
  1045 + TCGv t0 = tcg_const_i64(arg2);
  1046 + tcg_gen_add_i64(ret, arg1, t0);
  1047 + tcg_temp_free(t0);
  1048 + }
  1049 +}
  1050 +
1081 static inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2, 1051 static inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2,
1082 int label_index) 1052 int label_index)
1083 { 1053 {
@@ -1086,6 +1056,25 @@ static inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2, @@ -1086,6 +1056,25 @@ static inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2,
1086 tcg_temp_free(t0); 1056 tcg_temp_free(t0);
1087 } 1057 }
1088 1058
  1059 +static inline void tcg_gen_muli_i64(TCGv ret, TCGv arg1, int64_t arg2)
  1060 +{
  1061 + TCGv t0 = tcg_const_i64(arg2);
  1062 + tcg_gen_mul_i64(ret, arg1, t0);
  1063 + tcg_temp_free(t0);
  1064 +}
  1065 +
  1066 +static inline void tcg_gen_subi_i64(TCGv ret, TCGv arg1, int64_t arg2)
  1067 +{
  1068 + /* some cases can be optimized here */
  1069 + if (arg2 == 0) {
  1070 + tcg_gen_mov_i64(ret, arg1);
  1071 + } else {
  1072 + TCGv t0 = tcg_const_i64(arg2);
  1073 + tcg_gen_sub_i64(ret, arg1, t0);
  1074 + tcg_temp_free(t0);
  1075 + }
  1076 +}
  1077 +
1089 /***************************************/ 1078 /***************************************/
1090 /* optional operations */ 1079 /* optional operations */
1091 1080