Smalltalk-80: the language and its implementation
Smalltalk-80: the language and its implementation
The C programming language
Warren's abstract machine: a tutorial reconstruction
Warren's abstract machine: a tutorial reconstruction
A retargetable compiler for ANSI C
ACM SIGPLAN Notices
A tractable Scheme implementation
Lisp and Symbolic Computation
The structure and performance of interpreters
Proceedings of the seventh international conference on Architectural support for programming languages and operating systems
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Enhanced code compression for embedded RISC processors
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
A Tree-Based Alternative to Java Byte-Codes
International Journal of Parallel Programming
A dynamically configurable, multi-language execution platform
Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications
A code compression system based on pipelined interpreters
Software—Practice & Experience
Java bytecode compression for low-end embedded systems
ACM Transactions on Programming Languages and Systems (TOPLAS)
Communications of the ACM
Profile-guided code compression
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Java Virtual Machine Specification
Java Virtual Machine Specification
A Retargetable C Compiler: Design and Implementation
A Retargetable C Compiler: Design and Implementation
Maté: a tiny virtual machine for sensor networks
Proceedings of the 10th international conference on Architectural support for programming languages and operating systems
Building an Interpreter with Vmgen
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Vmgen: a generator of efficient virtual machine interpreters
Software—Practice & Experience
Generation of fast interpreters for Huffman compressed bytecode
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
MiBench: A free, commercially representative embedded benchmark suite
WWC '01 Proceedings of the Workload Characterization, 2001. WWC-4. 2001 IEEE International Workshop
Harissa: a flexible and efficient java environment mixing bytecode and compiled code
COOTS'97 Proceedings of the 3rd conference on USENIX Conference on Object-Oriented Technologies (COOTS) - Volume 3
SAMC: a code compression algorithm for embedded processors
IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems
Computing SSA Form with Matrices
Electronic Notes in Theoretical Computer Science (ENTCS)
Treegraph-based Instruction Scheduling for Stack-based Virtual Machines
Electronic Notes in Theoretical Computer Science (ENTCS)
TinyVM: an energy-efficient execution infrastructure for sensor networks
Software—Practice & Experience
Hi-index | 0.00 |
Resource constraints are a major concern with the design, development, and deployment of embedded systems. Embedded systems are highly hardware-dependent and have little computational power. Mobile embedded systems are further constrained by their limited battery capacity. Many of these systems are still programmed in assembly language because there is a lack of efficient programming environments. To overcome or at least alleviate the restrictions, we propose a light-weight and versatile programming environment for the C programming language that offers mixed-mode execution, i.e., code is either executed on the CPU or on a virtual machine (VM). This mixed-mode execution environment combines the advantages of highly compressed bytecode with the speed of machine code. We have implemented the programming environment and conducted experiments for selected programs of the MiBench suite and the Spec 2000. The VM has a footprint of 12 KB on the Intel IA32. Initial results show that the performance of the virtual machine is typically only 2 to 36 times slower than the binary execution, with compressed code occupying only 36%–57% of the machine code size. Combining sequences of VM instructions into new VM instructions (superinstructions) increases the execution speed and reduces the VM code size. Preliminary experiments indicate a speedup by a factor of 3.