Optimizing an ANSI C interpreter with superoperators
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Stack caching for interpreters
PLDI '95 Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation
Optimizing direct threaded code by selective inlining
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Java Virtual Machine Specification
Java Virtual Machine Specification
Bytecode fetch optimization for a Java interpreter
Proceedings of the 10th international conference on Architectural support for programming languages and operating systems
Vmgen: a generator of efficient virtual machine interpreters
Software—Practice & Experience
Optimizing indirect branch prediction accuracy in virtual machine interpreters
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
An optimized Java interpreter for connected devices and embedded systems
Proceedings of the 2003 ACM symposium on Applied computing
Combining stack caching with dynamic superinstructions
Proceedings of the 2004 workshop on Interpreters, virtual machines and emulators
Analyzing the performance of code-copying virtual machines
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Hi-index | 0.01 |
Interpretation has salient merits of simplicity, portability and small footprint but comes with a price of poor performance. Stack caching is a technique to build a high-performance interpreter by keeping source and destination operands of instructions in registers so as to reduce memory accesses involved during interpretation. One drawback of stack caching is that an instruction may have multiple ways to perform interpretation depending on which registers source operands reside in, resulting in code explosion as well as deterioration of code maintainability. This paper presents a code sharing mechanism that achieves performance as efficient as the stack-caching interpreter and in the meantime keeps the code size as compact as general threaded interpreters. Our results show that our approach outperforms a threaded interpreter by an average of 13.6% and the code size increases by only 1KB (~3%).