Direct Threaded Code

A direct-threaded representation of program code is simply a vector of procedure pointers to call, in the order they appear. In x86 assembly language, the "inner interpreter" of such a representation is drop-dead trivially simple:

  LODSD
  JMP    EAX

This assumes that ESI contains the program's next-PC value.

Direct call threading (usually referred to as just "call threading") is also possible:

  ; in x86 assembly

runVM: MOV EAX,[ESI] ADD ESI,4 CALL EAX JMP runVM

/* In C; if global state is kept in global variables, then there is no need for a specific environment. */

void runVM(Instruction *virtualIP, Environment *env) { while(ShouldNotQuit?(env)) { (*virtualIP++)(env); } }

Note that some C compilers permit computed goto expressions, such as GCC. If these are available, then C can also be used to implement a true direct threaded interpreter as well, thus avoiding the overheads of subroutine threading.


Contrast with IndirectThreadedCode, SubroutineThreadedCode, TokenThreadedCode


EditText of this page (last edited July 24, 2010) or FindPage with title or text search