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~