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 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 676 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
684 677 {
685 678 tcg_gen_op6(INDEX_op_sub2_i32, ret, TCGV_HIGH(ret),
686 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 682 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
697 683 {
698 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 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 777 static inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
799 778 {
800 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 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 879 static inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
908 880 {
909 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 884 static inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
920 885 {
921 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 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 979 #ifdef TCG_TARGET_HAS_div_i64
1022 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 1036  
1079 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 1051 static inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2,
1082 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 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 1079 /* optional operations */
1091 1080  
... ...