LuaJIT

LuaJIT chooses loops and function calls as trace anchors to begin recording possible hot paths.

Once LuaJIT begins recording, all control flow, including jumps and calls, are inlined to form a linear trace.

All executed bytecode instructions are stored and incrementally converted into LuaJIT's static single-assignment intermediate representation.

LuaJIT's trace compiler is often capable of inlining and removing dispatches from object orientation, operators, and type modifications.

[citation needed] DynASM includes a bare-bones C header file which is used at compile time for logic the preprocessor generates.