On Wed, Jun 28, 2017 at 16:09:06 +0300, Lluís Vilanova wrote: > Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> > ---
Reviewed-by: Emilio G. Cota <c...@braap.org> Tested-by: Emilio G. Cota <c...@braap.org> BTW have you tested icount mode? Minor nits below. > target/i386/translate.c | 120 > +++++++---------------------------------------- > 1 file changed, 18 insertions(+), 102 deletions(-) > > diff --git a/target/i386/translate.c b/target/i386/translate.c > index 3950fe95a4..295be26a95 100644 > --- a/target/i386/translate.c > +++ b/target/i386/translate.c (snip) > @@ -8544,111 +8548,23 @@ static void i386_trblock_disas_log(const > DisasContextBase *dcbase, > > } > > +static const TranslatorOps i386_trblock_ops = { > + .init_disas_context = i386_trblock_init_disas_context, > + .init_globals = i386_trblock_init_globals, > + .tb_start = i386_trblock_tb_start, > + .insn_start = i386_trblock_insn_start, > + .breakpoint_check = i386_trblock_breakpoint_check, > + .translate_insn = i386_trblock_translate_insn, > + .tb_stop = i386_trblock_tb_stop, > + .disas_log = i386_trblock_disas_log, > +}; I like hard tabs here, which make things visually easier, e.g.: > +static const TranslatorOps i386_trblock_ops = { > + .init_disas_context = i386_trblock_init_disas_context, > + .init_globals = i386_trblock_init_globals, Don't know whether checkpatch likes it, but I do, and I see some examples in the code base. > /* generate intermediate code for basic block 'tb'. */ > void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb) > { (snip) > + DisasContext dc1; > > - tb->size = dc->base.pc_next - dc->base.pc_first; > - tb->icount = num_insns; > + translate_block(&i386_trblock_ops, &dc1.base, cpu, tb); > } I'd just call it dc, then. E.