|
From: | Richard Henderson |
Subject: | Re: [Qemu-devel] TCG and branches |
Date: | Sat, 6 Aug 2016 08:13:55 +0530 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
On 07/31/2016 05:23 AM, Benjamin Herrenschmidt wrote:
The first obvious thing that comes to mind is to avoid stopping the TB on a non-taken conditional branch. The reason that can't be done today, from my limited understanding of things, is because we only support index 0 and 1 today for gen_goto_tb().
Correct.
Now I haven't completely figured out how TB linkage works under the hood but do you know of any fundamental reason why we have that limit ? Could we, for example, have a limit of, for example, 8 and only break the TB after a branch if we have less than 2 left ?
We do borrow low bits of a pointer (to a TranslationBlock) in implementing exit_tb. See TB_EXIT_MASK and the large block comment just above its definition in tcg/tcg.h.
However, increasing the alignment of TranslationBlock ought to be trivial, giving you as many bits as required. With that, I see no reason in principal that this wouldn't work.
Such a change would need some measurement to see how often this occurs, and how much this helps the actual runtime performance.
r~
[Prev in Thread] | Current Thread | [Next in Thread] |