On Wednesday, 14 January 2015 at 17:53:54 UTC, deadalnix wrote:
Once again, no specifics.

How is a bitmask (e.g. a set) not specific?

I was not lost. I know how to recognize a non sequitur when I read one.

Then you should also be able to explain where you got lost.

1. A single branch on return.

2. Multiple return paths.

2a) returning to the calling function

2b) using a landing pad (current solution)


It's a good thing that you can do all of these in D already.

This is about what the compiler does, not what you can do in D. So no. You cannot have multiple return paths (like returning to the returnaddress+OFFSET) or branch implicitly based on the carry flag upon return.

You only need this when you are using static TLS variable, which is not that common in practice. The change would makes this required all over the place.

That's the point. To have a buffer in TLS so that you don have to do transient heap allocations (allocation directly followed by deallocation of same object).

Making a new calling convention is not going to magically make things faster. If the calling convention need to do more, it is certainly going to make things slower.

One needs a calling convention to ensure that the backend puts the exception signal in the right register or to do offset return. Or to free up more registers. Haskell has a register heavy calling convention to speed up Haskell code.

So it is not certainly going to make things slower. Clearing a flag/register will most likely fill in a bubble in the pipeline. A predicted non-branching branch instruction is fairly cheap.

Hopefully, function calls are not common at all, so that shouldn't be a problem.

?

Reply via email to