develooper Front page | perl.perl6.internals | Postings from September 2001

RE: An overview of the Parrot interpreter

Thread Previous | Thread Next
From:
Dan Sugalski
Date:
September 5, 2001 11:30
Subject:
RE: An overview of the Parrot interpreter
Message ID:
5.1.0.14.2.20010905142214.02012360@pop.sidhe.org
At 11:17 AM 9/5/2001 -0700, Hong Zhang wrote:
>Howerver, I like to point out one hidden overhead of register opcode is
>decoding the parameter. The add instrction of stack machine does not have
>args, but for register machine, it has 3 arguments.

I skipped the decoding step in the machine design on purpose. Each opcode 
sort of does its own decoding. The way it works is you get an instruction 
stream that looks like:

    1
    0
    1000

for "integer_store constant 1000 in register I0". The integer_store 
function gets a pointer to the start of the instruction (1 in this case) 
and looks like:

   IV *int_store(IV *opstream, Perl_Interp interpreter) {
       interpreter->int_regs[opstream[1]] = opstream[2];
       return opstream + 3;
   }

more or less. (It's not quite a cut'n'paste from the current parrot source, 
but close, after macro substitution)

There's still more dereferencing going on than I'd like, but at least we 
only have a single write (to the register) not a pair (the stack top and 
the stack pointer) and we don't have to check the stack pointer to make 
sure we're not extending past the end of our stack.

Fewer writes, fewer branches, and higher instruction density is where the 
register-based system should buy us a win. If anyone wants to cobble 
together a simple stack machine we can compare against, that'd be fine.

					Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
dan@sidhe.org                         have teddy bears and even
                                      teddy bears get drunk


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About