Chip Salzenberg <[EMAIL PROTECTED]> writes:

> On Sun, Jun 12, 2005 at 03:15:22PM +0100, Piers Cawley wrote:
>> But if you fallow the calling conventions that looks like:
>> 
>>    sub foo {
>>      $a = 1.
>>      $c = 10;
>>      print $c
>>      
>> save_dollar_a_and_only_dollar_a_because_im_going_to_use_it_after_this_function_call
>>      foo()
>>     _implicit_label_for_return_continuation:
>>      restore_dollar_a
>>     _ooh_i_dont_have_to_save_anything
>>      $b = bar()
>>     _nor_do_i_have_to_restore_anything
>>     print $b
>>    }
>
> You have greatly misunderstood.  We're talking about how &foo manages
> its callee-saves registers.  The registers involved, the ones that I'm
> calling $a and $b, are P16-P31.
>
>> Of course, if you're going to actually use GOTO to get to some label
>> that you should only get to via a continuation ...
>
> For purposes of allocating the callee-saves registers, a continuation
> may as well _be_ a goto.

No it's not. A continuation should carry all the information required to
restore the registers to the correct state when it is taken. A goto
doesn't. For the purposes of allocating the registers in foo you can allocate
$a to P16, and $b to p16, because when the call to bar takes the continuation
back to bar, the 'restore' phase should grab $a from the continuation and bung
it back on P16. The continuation doesn't even need to know where to restore $a
to, because the 'caller restores' code should take care of that.

> Don't feel bad, though.  I thought the same thing the first time *I*
> heard about this problem.

I think you should have held that thought.

Reply via email to