On 04/28/2017 06:56 PM, Alex Bennée wrote:
>
> Richard Henderson <rth@twiddle.net> writes:
>
>> From: "Emilio G. Cota" <cota@braap.org>
>>
>> Instead of unconditionally exiting to the exec loop, use the
>> gen_jr helper to jump to the target if it is valid.
>>
>> Perf impact: see next commit's log.
>>
>> Reviewed-by: Richard Henderson <rth@twiddle.net>
>> Signed-off-by: Emilio G. Cota <cota@braap.org>
>> Message-Id: <1493263764-18657-10-git-send-email-cota@braap.org>
>> Signed-off-by: Richard Henderson <rth@twiddle.net>
>> ---
>> target/i386/translate.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/target/i386/translate.c b/target/i386/translate.c
>> index f0e48dc..ea113fe 100644
>> --- a/target/i386/translate.c
>> +++ b/target/i386/translate.c
>> @@ -2154,9 +2154,9 @@ static inline void gen_goto_tb(DisasContext *s, int tb_num, target_ulong eip)
>> gen_jmp_im(eip);
>> tcg_gen_exit_tb((uintptr_t)s->tb + tb_num);
>> } else {
>> - /* jump to another page: currently not optimized */
>> + /* jump to another page */
>> gen_jmp_im(eip);
>> - gen_eob(s);
>> + gen_jr(s, cpu_tmp0);
>
>
> I had to look up what was going on with cpu_tmp0 there. Is there a
> particular reason i386 has these global temps with implied setting
> rules? It does seem somewhat hacky.
It's mostly hysterical raisins, and that no one has rewritten it yet.
> Given cmp_tmp0 seems to be a heavily used across i386 I guess it keeps
> to the style of the translator :-/
Yeah. :-/
r~