M0 design problem

13 views
Skip to first unread message

Jimmy Zhuo

unread,
Apr 1, 2012, 11:17:43 PM4/1/12
to parro...@lists.parrot.org

Hello All,
I just realized that M0 is stack based. M0 is dedicated to use the least op to do the work, it's extreme makes it being stack based, not register based. If the latter is more advanced, then it's a retrogression. Here is some compares:

M0:
set_imm I0, 0, 123
set_imm I1, 0, 356
add_i     I2, I1, I0

jvm-ish:
push I0, 123
push I1, 123
add   I2, I1, I0

CPU-ish:
mov %eax, 123
add %eax, 356
or
add %eax, %ebx
or
add %eax, [0]   # [0] is memory unit.
or
add [0], %eax   # [0] is memory unit.

In M0, we can't do this:
add_i I2, 123, 356
 
which should be right way of register based VM, and which parrot currently does. I don't think parrot current ops implementation is bad, we should reuse it to implement M0 ops. And I don't want M0 is stack based for easier JIT too. Any thought or viewpoint?
 
regards,
Jimmy Zhuo

Brian Gernhardt

unread,
Apr 1, 2012, 11:51:53 PM4/1/12
to parrot-dev Mailing List

On Apr 1, 2012, at 11:17 PM, Jimmy Zhuo wrote:

> I just realized that M0 is stack based. M0 is dedicated to use the least op to do the work, it's extreme makes it being stack based, not register based. If the latter is more advanced, then it's a retrogression. Here is some compares:
>
> M0:
> set_imm I0, 0, 123
> set_imm I1, 0, 356
> add_i I2, I1, I0

> CPU-ish:


> mov %eax, 123
> add %eax, 356
> or
> add %eax, %ebx
> or
> add %eax, [0] # [0] is memory unit.
> or
> add [0], %eax # [0] is memory unit.
>
> In M0, we can't do this:
> add_i I2, 123, 356

I have thought it would be nice if M0 had some concept of addressing modes. Indirect, indexed, and immediate are things that jump to mind quickly. They could be handled by the core runloop before dispatching off to the ops for simplicity.

~~ Benabik

_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Christoph Otto

unread,
Apr 2, 2012, 6:12:34 PM4/2/12
to Brian Gernhardt, parrot-dev Mailing List

The big goal of M0 is stupid simplicity, but I also don't want
meaningfully efficient execution to require an optimizing assembler.
Adding addressing modes isn't out of the question.

I'm busier than I should be at the moment, but I'd love to see an
experiment with addressing modes. If either of you have the time,
please feel free to fork the m0 branch and hack out something on
the Perl interpreter. This kind of experimentation is exactly
what it's for.

Christoph
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply all
Reply to author
Forward
0 new messages