24 November 2024

TALK NERDY TO ME >> Deegen: A JIT-Capable VM Generator for Dynamic Languages

We gratefully acknowledge support from the Simons Foundation, member institutions, and all contributors.Donate

Computer Science > Programming Languages

Deegen: A JIT-Capable 


VM Generator for Dynamic Languages

 

Building a high-performance JIT-capable VM for a dynamic language has traditionally required a tremendous amount of time, money, and expertise. We present Deegen, a meta-compiler that allows users to generate a high-performance JIT-capable VM for their own language at an engineering cost similar to writing a simple interpreter.
Deegen takes in the execution semantics of the bytecodes implemented as C++ functions, and automatically generates a two-tier VM execution engine with a state-of-the-art interpreter, a state-of-the-art baseline JIT, and the tier-switching logic that connects them into a self-adaptive system.
We are the first to demonstrate the automatic generation of a JIT compiler, and the automatic generation of an interpreter that outperforms the state of the art. Our performance comes from a long list of optimizations supported by Deegen, including bytecode specialization and quickening, register pinning, tag register optimization, call inline caching, generic inline caching, JIT polymorphic IC, JIT IC inline slab, type-check removal and strength reduction, type-based slow-path extraction and outlining, JIT hot-cold code splitting, and JIT OSR-entry. These optimizations are either employed automatically, or guided by the language implementer through intuitive APIs. As a result, the disassembly of the Deegen-generated interpreter, baseline JIT, and the generated JIT code rivals the assembly code hand-written by experts in state-of-the-art VMs.
We implement LuaJIT Remake (LJR), a standard-compliant Lua 5.1 VM, using Deegen. Across 44 benchmarks, LJR's interpreter is on average 179% faster than the official PUC Lua interpreter, and 31% faster than LuaJIT's interpreter. LJR's baseline JIT has negligible startup delay, and its execution performance is on average 360% faster than PUC Lua and only 33% slower (but faster on 13/44 benchmarks) than LuaJIT's optimizing JIT.
Subjects:Programming Languages (cs.PL)
Cite as:arXiv:2411.11469 [cs.PL]
 (or arXiv:2411.11469v1 [cs.PL] for this version)
 https://doi.org/10.48550/arXiv.2411.11469

Submission history

From: Haoran Xu [view email]

[v1] Mon, 18 Nov 2024 11:12:57 UTC (1,168 KB)== 

No comments:

HERE TO PROVE ANYTHING CAN HAPPEN: Meme Coins Explained: Hype, Risk, and Profit!

   Finbold 14 hours ago Search inside image Dogecoin Whales move funds into this emerging AI Altcoin Expecting a 9,303% rally by January 202...