On 05/14/2013 08:16 AM, Richard Henderson wrote:
> On 05/14/2013 07:05 AM, Claudio Fontana wrote:
>>> Conditional branch range is +-1MB.  You'll never see a TB that large.  You
>>> don't need to emit a branch-across-branch.
>>
>> Is there maybe a way to do it right even in the corner case where we have
>> a huge list of hundreds of thousands of instructions without jumps and then 
>> a conditional jump?
>> Are we _guaranteed_ to never see that large a TB with some kind of define,
>> similarly to MAX_CODE_GEN_BUFFER_SIZE?
> 
> There are three mechanisms that all limit TB size:
>   (1) OPC_MAX_SIZE, limiting the number of opcodes emitted,
>   (2) CF_COUNT_MASK, limiting the number of instructions translated,
>   (3) Instruction pointer crossing a page boundary, where we end a TB
>       and re-verify the page protection bits of the new page.
> 
> Nr 1 is probably the most significant, since it most directly relates to
> the number of output instructions, and thus the resulting TB size.

BTW, for comparison, tcg/s390/tcg-target.c works well enough with just 16 bits
on the relative branch insns; eight times smaller than your 19 bits.


r~


Reply via email to