Hi liguang, Just to be curious, how much performance improvement this patch can get?
Regards, chenwj On Tue, Apr 09, 2013 at 11:45:39AM +0800, liguang wrote: > Signed-off-by: liguang <lig.f...@cn.fujitsu.com> > --- > target-arm/translate.c | 17 ++++++++--------- > target-i386/translate.c | 17 ++++++++--------- > target-mips/translate.c | 16 ++++++++-------- > 3 files changed, 24 insertions(+), 26 deletions(-) > > diff --git a/target-arm/translate.c b/target-arm/translate.c > index 35a21be..c0c080d 100644 > --- a/target-arm/translate.c > +++ b/target-arm/translate.c > @@ -9806,11 +9806,10 @@ static inline void > gen_intermediate_code_internal(CPUARMState *env, > cpu_M0 = tcg_temp_new_i64(); > next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > lj = -1; > - num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > - if (max_insns == 0) > + if (max_insns == 0) { > max_insns = CF_COUNT_MASK; > - > + } > gen_tb_start(); > > tcg_clear_temp_count(); > @@ -9889,9 +9888,9 @@ static inline void > gen_intermediate_code_internal(CPUARMState *env, > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > if (lj < j) { > - lj++; > - while (lj < j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj < j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } > tcg_ctx.gen_opc_pc[lj] = dc->pc; > gen_opc_condexec_bits[lj] = (dc->condexec_cond << 4) | > (dc->condexec_mask >> 1); > @@ -10028,9 +10027,9 @@ done_generating: > #endif > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > - lj++; > - while (lj <= j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj <= j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } else { > tb->size = dc->pc - pc_start; > tb->icount = num_insns; > diff --git a/target-i386/translate.c b/target-i386/translate.c > index 7596a90..9c5e1a3 100644 > --- a/target-i386/translate.c > +++ b/target-i386/translate.c > @@ -8319,11 +8319,10 @@ static inline void > gen_intermediate_code_internal(CPUX86State *env, > dc->is_jmp = DISAS_NEXT; > pc_ptr = pc_start; > lj = -1; > - num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > - if (max_insns == 0) > + if (max_insns == 0) { > max_insns = CF_COUNT_MASK; > - > + } > gen_tb_start(); > for(;;) { > if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) { > @@ -8338,9 +8337,9 @@ static inline void > gen_intermediate_code_internal(CPUX86State *env, > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > if (lj < j) { > - lj++; > - while (lj < j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj < j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } > tcg_ctx.gen_opc_pc[lj] = pc_ptr; > gen_opc_cc_op[lj] = dc->cc_op; > @@ -8387,9 +8386,9 @@ static inline void > gen_intermediate_code_internal(CPUX86State *env, > /* we don't forget to fill the last values */ > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > - lj++; > - while (lj <= j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj <= j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } > > #ifdef DEBUG_DISAS > diff --git a/target-mips/translate.c b/target-mips/translate.c > index b7f8203..d1e5d84 100644 > --- a/target-mips/translate.c > +++ b/target-mips/translate.c > @@ -15571,10 +15571,10 @@ gen_intermediate_code_internal (CPUMIPSState *env, > TranslationBlock *tb, > #else > ctx.mem_idx = ctx.hflags & MIPS_HFLAG_KSU; > #endif > - num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > - if (max_insns == 0) > + if (max_insns == 0) { > max_insns = CF_COUNT_MASK; > + } > LOG_DISAS("\ntb %p idx %d hflags %04x\n", tb, ctx.mem_idx, ctx.hflags); > gen_tb_start(); > while (ctx.bstate == BS_NONE) { > @@ -15595,9 +15595,9 @@ gen_intermediate_code_internal (CPUMIPSState *env, > TranslationBlock *tb, > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > if (lj < j) { > - lj++; > - while (lj < j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj < j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } > tcg_ctx.gen_opc_pc[lj] = ctx.pc; > gen_opc_hflags[lj] = ctx.hflags & MIPS_HFLAG_BMASK; > @@ -15678,9 +15678,9 @@ done_generating: > *tcg_ctx.gen_opc_ptr = INDEX_op_end; > if (search_pc) { > j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > - lj++; > - while (lj <= j) > - tcg_ctx.gen_opc_instr_start[lj++] = 0; > + while (++lj <= j) { > + tcg_ctx.gen_opc_instr_start[lj] = 0; > + } > } else { > tb->size = ctx.pc - pc_start; > tb->icount = num_insns; > -- > 1.7.2.5 > -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 Homepage: http://people.cs.nctu.edu.tw/~chenwj