Version 28, last updated by Mat2 at January 20, 2011 11:03 UTC

AVM:

is a general purpose, high-performance virtual machine as platform independent abstraction layer for common processor architectures.


Features:

  • Word-size agnostic instruction set.
  • Can be build with every recent, ANSI C compiler.
  • The interpreter dispatch-routine executes bundles of 2 vm-instructions instead of single bytecodes.
  • As each bundle is only 8-bit wide, a multible number of them can be fetched within a single word-sized memory operation. For common 64 bit processors these are 8 instruction bundles in one dispatch !
  • Generic, MISC oriented Harvard design, seperating operation codes from immediate parameters.
  • Allowing sharing of immediate parameters between code blocks for code-size optimations.
  • Minimal but flexible and generic, instruction set.
  • Embeddable into C source code.

Note:

At current the sources are a work in progress. Take a look at the milestones for information about stable releases and there time frame.

News:

2011-21-1New vm

AVM evolved into nAVM, visit: http://www.assembla.com/wiki/show/navm .

2010-30-6: New benchmark

A new benchmark was added as threading test which uses special features of AVM like conditional execution and opcode bundling. The results are better suited for comparsons with different virtual machines.

2010-30-5: Some corrections

I have temporary deleted the timings for gForth because after crc have investigated in some benchmark tests, the timings seems to diver too much from mine to be representative. He runs the benchs unter Mac OS X 10.5.8, cpu: Intel Dual Core II, 1,83 GHz.

2010-30-2: Testting overhead of subroutine calls

The overhead for subroutine calls is important for applications wich use subroutine threading (like the retroforth port I'm slowly work on) so I have create a micro benchmark which shows the performance of AVM executing ca. 5000000000 subroutine calls to see if there is demand for optimisation.

2010-30-1: Token-threaded interpreter variant, language support

There exist now a token-threaded variant of the interpreter. It can only be compiled with compilers supporting first-class labels (e.g. clang and Gnu C at this moment). The performance is comparable to the replicating-switch threaded version but offers smaller binarys.

  The file hierarchy of the sources was new structured for handling the different interpreter sources. Also new is the German and French language support.

2010-28-1: First microbenchmark

A first, little micro benchmark - testing the raw threading performance:

CPU: AMD Athlon64 3000+, RAM: 512 MB, OS: Suse Linux 11.2 (x86-64), COMPILER: gcc 4.4.1

VM Version File name Mean time [s]
AVM 0.1a test-threading-64.c 1.861
Ngaro (fast) 10.3 threading.retro 4.975
GForth (fast) 0.7.0 threading.4th unclear

Each test file iterate a small loop 10000000 times in order to receive comparable values.  The result is the mean time from 12 measures.

 

 

Status:

The interpreter is working and the C API is minimal but stable. For development an inline-assembler for C is now avariable. This allows the integration of assembler and C sources into one executable.

Current work: Debugging. Next Step: Port Retroforth 10 to AVM.