top | item 35923792

Building a baseline JIT for Lua automatically

10 points| djwatson24 | 2 years ago |sillycross.github.io

8 comments

order

djwatson24|2 years ago

Deegen is my research meta-compiler to make high-performance VMs easier to write. Deegen takes in a semantic description of the VM bytecodes in C++, and use it as the single source of truth to automatically generate a high-performance VM at build time

russellsprouts|2 years ago

> To solve [forward branches], those bytecodes would push information about how the branch destination address shall be fixed up into a late-patch buffer.

This reminds me of how Forth `if` and `then` can be compiled in a single pass -- `if` writes the branch instruction and pushes the current instruction pointer to the stack, and `then` pops it and patches the instruction to point to the current instruction pointer.

sillycross|2 years ago

That's an interesting approach :) Though it only works if the control flow in the language is exactly "paired" (no continue/break, no goto, etc), I guess?

celeritascelery|2 years ago

I don’t understand how you can remove the calls with copy-and-patch. It seems like you would have to inline evaluate_lhs and evaluate_rhs to remove calls completely.

sillycross|2 years ago

Look at the CPS-version of the add.

celeritascelery|2 years ago

Great work! This was a very interesting read. A lot of clever approaches here to make a generic JIT. How would one try out deegen?