XPLINK register conventions

XPLINK introduces a register scheme which is different from standard OS linkage, in order to optimize the performance of saving and restoring registers in function prologs and epilogs. The registers which are saved in the register save area of the XPLINK stack frame are described in Save area (48 bytes).

Table 1 shows the layout of the XPLINK interface.

Table 1. Comparing non-XPLINK and XPLINK register conventions
Interface part

Non-XPLINK

XPLINK

Stack pointer Reg 13 Reg 4 (biased; see The XPLINK stack frame layout)
Return address Reg 14 Reg 7
Entry point on entry Reg 15 Reg 6 (not guaranteed; a routine may be called via branch relative)
Environment Reg 0 (writable static) Reg 5
CAA Address Reg 12 Reg 12
Input parameter list address in R1 Located at offset 2112 ('840'x) off R4 (fixed location in caller's stack frame). First three words are passed in R1-R3, floating point values in FPR0, 2, 4, 6.
Return code Reg 15 R3 (extended return value in R1,R2)
Start address of callee's stack frame Caller's NAB value Caller's Reg 4 - DSA size
End address of callee's stack frame Caller's NAB value + DSA size Caller's Reg 4
Where caller's registers are saved

R0-R12 saved in caller's stack frame
R13 saved in callee's stack frame
R14-R15 saved in caller's stack frame

R0 not saved, not preserved
R1-R3 not saved, not preserved
R4 not saved, recalculated
(or saved, restored)
R5 not saved, not preserved
R6 saved in callee's stack frame,
not restored
R7-R15 saved in callee's stack frame
(R7 is the return register and is
not guaranteed to be restored)

See z/OS Language Environment Vendor Interfaces for additional information about register usage and conventions.