1: Vmgen generates much of the code for efficient virtual machine (VM)
2: interpreters from simple descriptions of the VM instructions. It
3: generates code for executing VM instructions (with optional tracing),
4: for generating VM code, for disassembling VM code, and for profiling
5: VM instruction sequences. A VM instruction description looks like
8: add ( i1 i2 -- i )
9: i = i1+i2;
11: Vmgen supports several techniques for writing efficient interpreters:
12: virtual machine interpreters, threaded code, combining VM instructions
13: into superinstructions, keeping the top-of-stack in a register,
14: scheduling the dispatch of the next VM instruction, and a couple of
15: minor optimizations. Interpreters created with vmgen usually are
16: faster than competing interpreters and are typically only a factor of
17: 2-10 slower than the code generateed by native-code compilers.
19: Vmgen has special support for stack-based VMs (but it can also be
20: used to advantage when implementing a register-based VM).
22: The main shortcoming in the current release is the lack of a user
23: manual; however, there is a paper describing vmgen's operation (at
24: http://www.complang.tuwien.ac.at/anton/vmgen/), and there is a simple,
25: working and somewhat commented example of using vmgen (in directory
28: The current release requires GCC both for building and for compiling
29: the resulting interpreters (threaded code cannot be implemented in
30: ANSI C).
32: If you have bugs to report, suggestions to make, questions, or any
33: other feedback, mail me (email@example.com).
35: You can find vmgen at http://www.complang.tuwien.ac.at/anton/vmgen/.
37: Vmgen is currently distributed with Gforth (because it needs Gforth to
38: run, and Gforth needs it to build), and is installed together with
39: Gforth (read INSTALL for instructions).
41: Note that future versions of vmgen will probably require small changes
42: in programs written for the present version (e.g., requiring a few
43: additional macro definitions).