On Tue, Feb 1, 2011 at 05:31, Peter Maydell wrote: > So for instance here: > > +static void gen_hwloop_check(DisasContext *dc) > +{ > + bool loop1, loop0; > + int endl; > + > + loop1 = (dc->pc == dc->env->lbreg[1]); > + loop0 = (dc->pc == dc->env->lbreg[0]); > > I suspect that this check of pc against the lbreg[] > values should be being done in the generated code, > not at translate time.
that is not feasible from a performance perspective. what you're proposing is that i put a check on *every* insn to see if the current pc is equal to either of the loop registers. the way i'm doing it atm i believe is safe. if a lbreg changes, then i invalidate any TBs associated with the old value and any TBs associated with the new value. thus i force the code to be retranslated, and i can assume the lbreg values are constant when doing so. -mike