According to the Oracle SPARC Architecture documentation, the particular implementation may contain between 72 and 640 general-purpose 64-bit R registers. However, only 31/32 GPRs are immediately visible at any one time; 8 are global registers, R[0] to R[7] (also known as g0-g7), with the first register, g0, hardwired to 0; and 24 are associated with the following register windows:
- Eight in registers in[0]-in[7] (R[24]-R[31]): For passing arguments and returning results
- Eight local registers local[0]-local[7] (R[16]-R[23]): For retaining local variables
- Eight out registers out[0]-out[7] (R[8]-R[15]): For passing arguments and returning results
The CALL instruction writes its own address into the out[7] (R[15]) register.
In order to pass arguments to the function, they must be placed in the out registers and, when the function gets control, it will access them in its in registers. Additional arguments can be provided through the stack. The result is placed to the first in register...