Dan Sugalski (via RT) wrote:

> We need to nail down what the directions mean. 


This is, what I'm trying to do since quite a time.

> ... The IMCC and JIT folks 
> are the ones that care here. 


Here is the IMCC folks speaking ;-)

>... I've been working on the assumption that 
> an out means that the register in question may change value, so it's 
> not appropriate on, say, add P1, P2, P3, since the destination 
> *register* doesn't change, just the value of the PMC in the register. 


This is what I did say in my first attempt to clarify this, my proposal 
then was, to make them all »in«. Then Angel Faus answered, that »inout« 
would be more appropriate, because something in this PMC is modified.

This is ok for me, because »inout« is for the life cycle of a register 
the same as »in«, so I treat »inout« as »in«.

With my patch we would have

in ... I,S,N,P unchanged
inout..I,S,N new value, P unchanged, but some change inside
out... I,S,N,P new value

... which is ok, as long as we don't have an op like:

make_me_an_arr(inout PerlHash)

which would make a different PMC out of it's argument (I mean not by 
changing the vtable, but return a new PMC)

Actually a »in« argument is always ok, because it means for IMCC, this 
register is alive. A »out« means, for the register allocator, we have a 
new value, so don't care about the old value, this can be assigned the 
same "physical" parrot register.

So too much »in« ARGDIRS just provoke a worse register allocation and 
maybe spilling.

leo

Reply via email to