Commit a973001797221b0fd7be55cb6513c72a01f4b639
1 parent
ec6469a3
target-ppc: Remove a few TCG temp variable leaks
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5660 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
19 additions
and
9 deletions
target-ppc/translate.c
... | ... | @@ -858,6 +858,7 @@ GEN_HANDLER(isel, 0x1F, 0x0F, 0xFF, 0x00000001, PPC_ISEL) |
858 | 858 | gen_set_label(l1); |
859 | 859 | tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rB(ctx->opcode)]); |
860 | 860 | gen_set_label(l2); |
861 | + tcg_temp_free(t0); | |
861 | 862 | } |
862 | 863 | |
863 | 864 | /*** Integer arithmetic ***/ |
... | ... | @@ -911,15 +912,21 @@ static always_inline void gen_op_arith_compute_ca(DisasContext *ctx, TCGv arg1, |
911 | 912 | } else { |
912 | 913 | tcg_gen_brcond_tl(TCG_COND_GEU, t0, t1, l1); |
913 | 914 | } |
915 | + tcg_gen_ori_tl(cpu_xer, cpu_xer, 1 << XER_CA); | |
916 | + gen_set_label(l1); | |
917 | + tcg_temp_free(t0); | |
918 | + tcg_temp_free(t1); | |
914 | 919 | } else |
915 | 920 | #endif |
916 | - if (sub) { | |
917 | - tcg_gen_brcond_tl(TCG_COND_GTU, arg1, arg2, l1); | |
918 | - } else { | |
919 | - tcg_gen_brcond_tl(TCG_COND_GEU, arg1, arg2, l1); | |
921 | + { | |
922 | + if (sub) { | |
923 | + tcg_gen_brcond_tl(TCG_COND_GTU, arg1, arg2, l1); | |
924 | + } else { | |
925 | + tcg_gen_brcond_tl(TCG_COND_GEU, arg1, arg2, l1); | |
926 | + } | |
927 | + tcg_gen_ori_tl(cpu_xer, cpu_xer, 1 << XER_CA); | |
928 | + gen_set_label(l1); | |
920 | 929 | } |
921 | - tcg_gen_ori_tl(cpu_xer, cpu_xer, 1 << XER_CA); | |
922 | - gen_set_label(l1); | |
923 | 930 | } |
924 | 931 | |
925 | 932 | /* Common add function */ |
... | ... | @@ -1230,8 +1237,8 @@ GEN_HANDLER(mullwo, 0x1F, 0x0B, 0x17, 0x00000000, PPC_INTEGER) |
1230 | 1237 | int l1; |
1231 | 1238 | TCGv t0, t1; |
1232 | 1239 | |
1233 | - t0 = tcg_temp_local_new(TCG_TYPE_I64); | |
1234 | - t1 = tcg_temp_local_new(TCG_TYPE_I64); | |
1240 | + t0 = tcg_temp_new(TCG_TYPE_I64); | |
1241 | + t1 = tcg_temp_new(TCG_TYPE_I64); | |
1235 | 1242 | l1 = gen_new_label(); |
1236 | 1243 | /* Start with XER OV disabled, the most likely case */ |
1237 | 1244 | tcg_gen_andi_tl(cpu_xer, cpu_xer, ~(1 << XER_OV)); |
... | ... | @@ -1253,6 +1260,8 @@ GEN_HANDLER(mullwo, 0x1F, 0x0B, 0x17, 0x00000000, PPC_INTEGER) |
1253 | 1260 | #endif |
1254 | 1261 | tcg_gen_ori_tl(cpu_xer, cpu_xer, (1 << XER_OV) | (1 << XER_SO)); |
1255 | 1262 | gen_set_label(l1); |
1263 | + tcg_temp_free(t0); | |
1264 | + tcg_temp_free(t1); | |
1256 | 1265 | if (unlikely(Rc(ctx->opcode) != 0)) |
1257 | 1266 | gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]); |
1258 | 1267 | } |
... | ... | @@ -2034,8 +2043,8 @@ static always_inline void gen_sradi (DisasContext *ctx, int n) |
2034 | 2043 | TCGv t0; |
2035 | 2044 | l1 = gen_new_label(); |
2036 | 2045 | l2 = gen_new_label(); |
2046 | + t0 = tcg_temp_local_new(TCG_TYPE_TL); | |
2037 | 2047 | tcg_gen_brcondi_tl(TCG_COND_GE, cpu_gpr[rS(ctx->opcode)], 0, l1); |
2038 | - t0 = tcg_temp_new(TCG_TYPE_TL); | |
2039 | 2048 | tcg_gen_andi_tl(t0, cpu_gpr[rS(ctx->opcode)], (1ULL << sh) - 1); |
2040 | 2049 | tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1); |
2041 | 2050 | tcg_gen_ori_tl(cpu_xer, cpu_xer, 1 << XER_CA); |
... | ... | @@ -2043,6 +2052,7 @@ static always_inline void gen_sradi (DisasContext *ctx, int n) |
2043 | 2052 | gen_set_label(l1); |
2044 | 2053 | tcg_gen_andi_tl(cpu_xer, cpu_xer, ~(1 << XER_CA)); |
2045 | 2054 | gen_set_label(l2); |
2055 | + tcg_temp_free(t0); | |
2046 | 2056 | tcg_gen_sari_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)], sh); |
2047 | 2057 | } else { |
2048 | 2058 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); | ... | ... |