Table 3-1, Table 3-2, and Table 3-3 show the required conventions regarding
argument and return value passing. Users risk the unintentional destruction of
necessary data if their programs do not adhere to the standard conventions.
Table 3-1 Space Register Usage
Register Name
Other Names
Usage Convention
sr0
Caller-saves space register or millicode (nested or external) millicode
return space register.
sr1
sarg sret
Space argument and return register or caller-saves space register.
sr2
Caller-saves space register.
sr3
Callee-saves space register.
sr4
Code space register (stubs save and restore on inter-module calls).
sr5
Data space register, modified only by privileged code.
sr6
System space register, modified only by privileged code.
sr7
System space register, modified only by privileged code.
NOTE: If the routine in question is a non-leaf routine, gr2 must be
stored because subsequent calls will modify it. Once stored, it is available to
be used as a scratch register by the code generators.
Although common, it is not absolutely necessary that gr2 be restored before
exit; a branch (BV) using another caller-saves register is allowed.
Table 3-2 General Register Usage
Register Name
Other Names
Usage Convention
gr0
Zero value register. (Writing to this register does not affect its contents.)
gr1
Scratch register (caller-saves). (can be destroyed by call mechanism).
gr2
RP
Return pointer and scratch register.
gr3 - gr18
General purpose callee-saves registers.
gr19 - gr22
General purpose caller-saves registers.
gr23
arg3
Argument register 3 or general purpose caller-saves register.
gr24
arg2
Argument register 2 or general purpose caller-saves register.
gr25
arg1
Argument register 1 or general purpose caller-saves register.
gr26
arg0
Argument register 0 or general purpose caller-saves register.
gr27
DP
Global data pointer; may not be used to hold other values. (Stubs save
and restore on inter-module calls)
gr28
ret0
Function return register on exit or function result address on entry.
May also be used as a general purpose caller-saves register.
gr29
SL ret1
Static link register (on entry), millicode function return or function
return register for upper part of a 33 to 64 bit function result. May also
be used as a general purpose caller-saves register.
gr30
SP
Stack pointer, may not be used to hold other values.
gr31
Millicode return pointer or scratch register (caller-saves).
Table 3-3 Floating-Point Register Usage
Register Name
Other Names
Usage Convention
fr0
Floating-point coprocessor status. See discussion in the text of this
chapter.
fr1 - fr3
Floating-point exception registers. Cannot be modified by user code.