3 ms·
I see, thanks! Yes, VAX CALLS/CALLG is pretty much what I'm talking about, but with arguments in registers. I think the performance landscape has changed some
by kragen 1y ago
I see, thanks!
Yes, VAX CALLS/CALLG is pretty much what I'm talking about, but with arguments in registers.
I think the performance landscape has changed somewhat since Patterson; if your instruction decoder is shattering each instruction into a dependency graph of separately executable micro-ops anyway to support OoO, you don't have to slow down your whole pipeline to support elaborate instructions like cm.push or CALLG. As I see it, though, a couple of things haven't changed:
- Having arguments in registers is faster than having arguments in memory.
- Page fault handling is unfriendly to architectural instructions having multiple effects, because the page fault can't be handled at the micro-op level; it has to be handled at the architectural level. But maybe this is a smaller problem with OoO and especially speculative execution, I don't know.
If you can safely get by with a complete restart of the instruction, though, the page fault problem goes away.
I think that solves the problems Patterson identified?