Hacker News new | ask | show | jobs
by chrisaycock 2842 days ago
The appendix (Converting Stack-Based OpCodes into Register Operations) is the most interesting part to me. Targeting a stack machine is much easier when writing a compiler for the first time, but real-world machines are generally register based.

I couldn't find the authors' logic in a cursory look at the source code. Does anyone know where it actually is?

2 comments

Targeting a stack machine is much easier when writing a compiler for the first time, but real-world machines are generally register based.

In general this is true, here however, we are targeting LLMV IR which is register based with infinite registers; so it's kinda easy again :-) The hard part, register allocation, is actually done by LLVM.

This class implements the conversion: https://github.com/lambdageek/mono/blob/mjit/mcs/class/Mono....

Not sure where the logic is, but a far easier explanation is: allocate a new variable each time you push into the stack (regardless of stack depth).