Labels as values and threaded-code interpretation
Dmitry Olshansky
dmitry.olsh at gmail.com
Sun Jun 2 13:28:26 PDT 2013
02-Jun-2013 22:25, Alex Rønne Petersen пишет:
> On 02-06-2013 19:58, Dmitry Olshansky wrote:
>>
>> One pointer to a struct MyInterpreterState. Think of it as 'this'
>> pointer :)
>
> That's one load and store for every single step in the interpreter.
> Sounds harmless, but every cycle matters when every goto start(...)
> amounts to a single instruction in the program you're running.
>
If the instruction set is RISC-y then you are in trouble anyway (writing
interpreter not in ASM). One way out is fusing multiple simple
instructions into macro-instructions and interpreting those.
> Either way, evidence suggests that this style of interpreter has
> performance advantages in practice.
>
Agreed. Though this day I'd go for what I call "bastardized JIT". In
essense just produce a chunk of "call XYZ" instructions, comnditionals
would have to have a test + jmp. And then there is 'ret' at the end of
this chunk ~4 instructions to have to deal with. What you get is branch
prediction done on the hardware level and no instruction counter to
worry about.
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list