Commit 8c99506cfbf61da72fa007b972636b43db21fb2e
1 parent
6e0d8677
Fix local register cache handling.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4495 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
13 additions
and
4 deletions
target-mips/translate.c
... | ... | @@ -504,7 +504,7 @@ static inline void gen_op_store_gpr_T1(int reg) |
504 | 504 | /* Moves to/from shadow registers */ |
505 | 505 | static inline void gen_op_load_srsgpr_T0(int reg) |
506 | 506 | { |
507 | - int r_tmp = new_tmp(); | |
507 | + TCGv r_tmp = new_tmp(); | |
508 | 508 | |
509 | 509 | tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl)); |
510 | 510 | tcg_gen_shri_i32(r_tmp, r_tmp, CP0SRSCtl_PSS); |
... | ... | @@ -518,7 +518,7 @@ static inline void gen_op_load_srsgpr_T0(int reg) |
518 | 518 | |
519 | 519 | static inline void gen_op_store_srsgpr_T0(int reg) |
520 | 520 | { |
521 | - int r_tmp = new_tmp(); | |
521 | + TCGv r_tmp = new_tmp(); | |
522 | 522 | |
523 | 523 | tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl)); |
524 | 524 | tcg_gen_shri_i32(r_tmp, r_tmp, CP0SRSCtl_PSS); |
... | ... | @@ -1016,7 +1016,7 @@ OP_LD_ATOMIC(lld,ld64); |
1016 | 1016 | #define OP_ST_ATOMIC(insn,fname,almask) \ |
1017 | 1017 | void inline op_ldst_##insn(DisasContext *ctx) \ |
1018 | 1018 | { \ |
1019 | - int r_tmp = tcg_temp_new(TCG_TYPE_TL); \ | |
1019 | + TCGv r_tmp = tcg_temp_new(TCG_TYPE_TL); \ | |
1020 | 1020 | int l1 = gen_new_label(); \ |
1021 | 1021 | int l2 = gen_new_label(); \ |
1022 | 1022 | int l3 = gen_new_label(); \ |
... | ... | @@ -1956,7 +1956,7 @@ static inline void tcg_gen_set_bcond(void) |
1956 | 1956 | |
1957 | 1957 | static inline void tcg_gen_jnz_bcond(int label) |
1958 | 1958 | { |
1959 | - int r_tmp = tcg_temp_new(TCG_TYPE_TL); | |
1959 | + TCGv r_tmp = tcg_temp_new(TCG_TYPE_TL); | |
1960 | 1960 | |
1961 | 1961 | tcg_gen_ld_tl(r_tmp, cpu_env, offsetof(CPUState, bcond)); |
1962 | 1962 | tcg_gen_brcond_tl(TCG_COND_NE, r_tmp, tcg_const_tl(0), label); |
... | ... | @@ -6834,6 +6834,9 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
6834 | 6834 | if (search_pc && loglevel) |
6835 | 6835 | fprintf (logfile, "search pc %d\n", search_pc); |
6836 | 6836 | |
6837 | + num_temps = 0; | |
6838 | + memset(temps, 0, sizeof(temps)); | |
6839 | + | |
6837 | 6840 | pc_start = tb->pc; |
6838 | 6841 | gen_opc_end = gen_opc_buf + OPC_MAX_SIZE; |
6839 | 6842 | ctx.pc = pc_start; |
... | ... | @@ -6888,6 +6891,12 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
6888 | 6891 | } |
6889 | 6892 | ctx.opcode = ldl_code(ctx.pc); |
6890 | 6893 | decode_opc(env, &ctx); |
6894 | + if (num_temps) { | |
6895 | + fprintf(stderr, | |
6896 | + "Internal resource leak before " TARGET_FMT_lx "\n", | |
6897 | + ctx.pc); | |
6898 | + num_temps = 0; | |
6899 | + } | |
6891 | 6900 | ctx.pc += 4; |
6892 | 6901 | |
6893 | 6902 | if (env->singlestep_enabled) | ... | ... |