3 ms·
Probably not that much because one of the legacies of x86 is that library calling conventions are based on this same registry scarcity. To make an API call ther
by hinkley 3mo ago
Probably not that much because one of the legacies of x86 is that library calling conventions are based on this same registry scarcity. To make an API call there is a convention that a limited number of registers are treated as callee-preserves and the rest are caller-preserves. So your compiler spills them defensively before calling out.
You can make a programming language that uses whatever convention you want, but every time you make a system call or a call to a C or Rust library, you're using essentially an FFI and your FFI logic will have to handle the register spill and recovery to match the convention. And if you convert your code to a library, then it'll have to be dumbed down as well.
- nyrikki 3mo agoCalling conventions are a compiler feature, and in some languages like zig, will let the LLVM backend fully optimize. In zig you can specify a different calling convention at any function call, and you have to be explicit if you want a ABI contract at all. Intel introduced the RAT (Register address table) with the P6 in 1995. Although IIRC it depended on ROT(Register Order Table) and wouldn’t affect the outcome the same way. I think Netburst is where it really was extended to support out-of-order pipeline stages. As long as the CPU does’t violate the interface contract it can micro-optimize at will.