[comp.sys.sun] ? conventions on SPARC

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