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~

Reply via email to