Dan --

> Ah, but I'd rather do it right the first time than have to redo it later, 
> especially if the redoing is incompatible with what was done first. ;)

I would, too. But I view Jako is being a sort of test bed for what our
choices at the Parrot level do to language implementers. So, Jako is
intended to track the current-best-practice, as it changes. That means
I expect, for example, to re-implement the calling convention stuff a
few times. Heck, Jako had subroutines before we had bsr!

> >FWIW, I'd rather not dedicate registers to special uses at the Parrot
> >level.
> 
> These would only be reserved for subroutine calls, which is pretty standard 
> on CPUs with a reasonable number of registers. Normally a half-dozen or so 
> float and general registers are marked as scratch, so the callee can mess 
> with them as it wants. You say registers X-Y hold the parameters to the 
> caller, register X holds the return value, register Y holds the status (if 
> they're separate) and registers M-N are declared as scratch and the callee 
> doesn't have to preserve them.
> 
> The only time these rules are in effect is when you make a sub call. Within 
> the sub, you can do whatever you like with the registers.
> 
> Now, things are more interesting with Parrot, since we have at least one 
> language that can potentially take and return a huge list of things, which 
> is why I'm tending towards the "pass a list in P0, return a list in P0" way 
> of doing things, or a separate stack of values. The biggest problem with a 
> stack is that things are in reverse order, where passing in a list gets 
> them to you in proper order.

I agree that a HLL that has a list type should use that list type for its
arg and return passing. But, low level stuff (like Jako is
currently) should still have access to a reasonable no-pmc-required
calling convention, IMO.


Regards,

-- Gregor

Reply via email to