Direct Threaded CodeA 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 EAXThis 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