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: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v11 23/29] target/arm: [tcg] Port to translate_insn
Date: Mon, 10 Jul 2017 05:28:16 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

On 07/10/2017 03:47 AM, Lluís Vilanova wrote:
Richard Henderson writes:

On 07/07/2017 07:18 AM, Lluís Vilanova wrote:
There was no code being generated after this specific case, but I haven't
checked if DISAS_EXC is set in any other place that is not immediately followed
by a "goto done_generating".

Typically we haven't actually done a goto, but simply exit the loop and emit
nothing within the final cleanup (tb_stop?).

The case handled by DISAS_SKIP ignores tb_stop() (the target code can simply
return when DISAS_EXC is found instead of DISAS_SKIP) *and* gen_io_end(); this
last one is never omitted when DISAS_EXC is found now, and theoretically
DISAS_EXC can be set by any target-specific hook. Thus my question if the
generic call to gen_io_end() should check for DISAS_EXC too (I have no idea if
it would be an error to call it with DISAS_EXC set, or whether it makes sense to
for a target to set it so that gen_io_start() is called but gen_io_end() is then
skipped by a DISAS_EXC set in ops->translate_insn()).

It is not an error to call gen_io_start when gen_io_end isn't called (or isn't reached). There are many ways that can happen.

The reason that arm does the goto after the gen_exception for single-stepping was simply convenience. Nothing would have gone wrong if it had used

        dc->is_jmp = DISAS_EXC;
        break;

instead.


r~



reply via email to

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