djones@decwrl.dec.com (Dave Jones) (10/08/90)
Hi. I need to know more about Sun's conventions for low-level SPARC programming. Any pointers to documents would be appreciated. I've got the SPARC Architecture Manual, and an Assembly Language manual has been ordered, but there's a long wait to get it and I have to get cranking now. Specifically what I would like to know first is what the conventions are for using the registers, including global registers %g1 through %g7. At least some of them are used for temporaries that are not expected to survive function calls. If you compile a function without the -O option the first thing you see is this: !#PROLOGUE# 0 sethi %hi(LF12),%g1 add %g1,%lo(LF12),%g1 save %sp,%g1,%sp !#PROLOGUE# 1 Notice that %g1 gets clobbered, but it was not saved first. The caller better not be using it. Are all the global registers treated this way? If not which ones are? I haven't had any success coaxing the C compiler into using the other global registers. Also, as I read the architecture manual, out-registers not used for parameters are treated similarly: The callee (who sees them as in-registers) may modify them. So it is okay to use in-registers without saving and restoring them, but out-registers used as temporaries must not be live across procedure-calls. Correct? Does the caller or the callee save/restore floating-point registers? I'm guessing it's the callee. If you would be good enough to email me some pointers, my address is sun!megatest!djones