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.