For those interested in writing their own compiler in C#. There was a decent article a while back written by Microsoft employees with example code provided. Looks like MS have archived the post, but you can still browse the code (almost unadulterated) here:
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?
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.
https://github.com/johandanforth/good-for-nothing-compiler (not my github)
And read an expanded/in depth version of the original article (with a link to download the original source) here:
https://www.cs.helsinki.fi/u/vihavain/k14/code_generation/pr...