Richard Henderson writes: > On 06/28/2017 06:49 AM, Lluís Vilanova wrote: >> + /* We want to stop the TB if the next insn starts in a new page, >> + * or if it spans between this page and the next. This means that >> + * if we're looking at the last halfword in the page we need to >> + * see if it's a 16-bit Thumb insn (which will fit in this TB) >> + * or a 32-bit Thumb insn (which won't). >> + * This is to avoid generating a silly TB with a single 16-bit insn >> + * in it at the end of this page (which would execute correctly >> + * but isn't very efficient). >> + */ >> + return DISAS_PAGE_CROSS;
> Any reason to introduce a new name as opposed to TOO_MANY? As far as I can > tell > they're the same.... Yes, DISAS_SS and DISAS_PAGE_CROSS turned out to be remnants of previous series. >> + if (dc->ss_active && !dc->pstate_ss) { >> + /* Singlestep state is Active-pending. >> + * If we're in this state at the start of a TB then either >> + * a) we just took an exception to an EL which is being debugged >> + * and this is the first insn in the exception handler >> + * b) debug exceptions were masked and we just unmasked them >> + * without changing EL (eg by clearing PSTATE.D) >> + * In either case we're going to take a swstep exception in the >> + * "did not step an insn" case, and so the syndrome ISV and EX >> + * bits should be zero. >> + */ >> + assert(dc->base.num_insns == 1); >> + gen_exception(EXCP_UDEF, syn_swstep(dc->ss_same_el, 0, 0), >> + default_exception_el(dc)); >> + dc->base.is_jmp = DISAS_SKIP; > This is surely DISAS_EXC -- see gen_step_complete_exception. > Why introduce a new name? The original code goes straight to done_generating here, and that's the purpose of DISAS_SKIP (skip the code executed between the end of the loop and the done_generating label). Thanks, Lluis