On 11/30/2017 8:34 PM, Nicholas Wilson wrote:
What I meant in terms of icache pollution is with the 'cold' is instead of generating:

if(!cond)
     _d_assert(__FILE__, __LINE__,message);
//rest of code

it should actually generate,

if (!cond)
     goto failed;
//rest of code

failed:
     _d_assert(__FILE__, __LINE__,message);//call is cold & out of line. no icache pollution

I'm not sure that it does that given the triviality of the example, but it looks like it doesn't.

You're right, it would be better to generate code that way. But it currently does not (I should fix that). It's not completely correct that icache isn't polluted. Functions that are tightly coupled can be located adjacent for better cache performance, and the various asserts would push them apart. Also, the conditional jumps may need to be the longer variety due to the longer distance, rather than the 2 byte one.

Reply via email to