On Tuesday, 13 January 2015 at 03:05:57 UTC, Walter Bright wrote:
On 1/12/2015 4:40 PM, deadalnix wrote:
These are trash register. Meaning the callee can put whatever in them. The
caller must consider them trashed after the call.

So no, it do NOT increase register pressure.

1. the register must be assigned a value - that has a cost

xor on Haswell has a reciprocal throughput of 0.25, meaning execution of 4 instructions per cycle per core.

3. it prevents EDX from being used by the return value, when the return value is larger than a single register size

Store the error in TLS memory using a write-through (no load from memory) instruction and use the carry-flag instead then (assuming the return instruction does not clear carry). CLC has reciprocal throughput of 0.25 too.

4. static functions may not need to follow the C ABI register convention, and can be so optimized

D calls D, no problem.

D calls C, no problem, C can't return D errors...

C calls D, a problem no matter what solution you pick.

Reply via email to