Settings

Theme

Writing a JIT Compiler in C#

mono-project.com

48 points by lewurm · 4 comments

Reader

2 threads
dagoat

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:

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...

chrisaycock

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?

  • lewurmOP

    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....

  • zamalek

    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).

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection