>>  
> I know the caller's %o will be the callee's %i after the 'save', but I 
> don't think they are saved on the stack when the 'call' or 'save' 
> executes. Just as what I mean, these acres are just reserved for 
> traps, those registers are saved by the trap handler or the resume().
Correct, they "saved" (by means of spill handlers) to the stack, when we 
context switch, execute a flushw instruction, or when a register window 
is about to be overwritten (i.e. the window rotates all the way around, 
which is about 6 function deep IIRC for the old UltraSPARC processors, 
so the save could trigger a spill for a different register window (and 
saved into that register windows frame on the stack), and the restore 
instruction would load them back into the hardware)... nwindows = 8, 
(there is an overlap window), and probably some other circumstances.

The bottom line is that when a thread is executing, the current contents 
aren't necessarily there.
>>> 3. the callee reserve area for the Locals and temps and outgoing 
>>> args past 6. together with the caller's bias area(I don't know how 
>>> to express this area, so just name as is), can be accessed by the 
>>> callee for its private use.
>>>     
>> We have a minimum stack frame which is large enough to hold the 
>> registers + the frame is extended to hold the local variables. The 
>> bias isn't an area, think of it like calibrating the steering on a 
>> car or remote control boat. i.e. the default position is always 
>> offset by a particular amount.
>>   
> I know the answer. From the doc you sent to me, I got:
>
> /The SPARC V9 ABI defines the stack pointer to have bias subtracted. 
> This means that stack pointer for 64-bit program normally contains an 
> misaligned value,but load and store instructions generated by the com- 
> piler subtract the required bias to generate the correct address.
>
> /so it is just a definition of the %sp, nothing else.
I think "specifies" or "convention" would be better words, but yes.


Cheers,
Greg


Reply via email to