qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v11 23/29] target/arm: [tcg] Port to translate_i


From: Lluís Vilanova
Subject: Re: [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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]