[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH v11 23/29] target/arm: [tcg] Port to
From: |
Lluís Vilanova |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH v11 23/29] target/arm: [tcg] Port to translate_insn |
Date: |
Fri, 07 Jul 2017 13:13:57 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
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