Building a high-performance JIT-capable VM for a dynamic language has traditionally required tremendous time, money, and expertise. To make high-performance VMs easier to engineer, we present Deegen, a compiler-compiler that uses LLVM to statically generate a JIT-capable VM from C++ execution semantics of the bytecodes. Currently, Deegen is capable of automatically generating a two-tier VM execution engine (consisting of an optimized interpreter, a baseline JIT and the tier-switching logic). We are in the progress of generating the third-tier optimizing JIT. To demonstrate Deegen’s capability in the real world, we implemented LuaJIT Remake (LJR), a standard-compliant VM for Lua 5.1. Across a variety of benchmarks, we demonstrated that LJR’s interpreter significantly outperforms LuaJIT’s interpreter, and LJR’s baseline JIT generates high-quality code with a negligible compilation cost.