CEEVROND — run on downward-growing stack

This CWI is invoked from a non-XPLINK routine running on the upward-growing stack. It is used to invoke an XPLINK routine that runs on the downward-growing stack. It performs stack swapping, moves the parameter list, and loads appropriate parameters into registers before invoking the routine. After the routine returns, it will adjust the return value and swap the stacks back.

This CWI has two entry points: +0 for standard linkage and +16 for FASTLINK linkage.
Linkage Input/Output Register Used for
Standard Input Registers R0 Function descriptor
R1 Parameter List
R2 - R11 Not used
R12 CAA address
R13 Caller's DSA
R14 Return address
R15 Entry point (CEEVROND)
Output Registers R0 Extended return value
R1 - R14 Unchanged
R15 Return value
FASTLINK Input Registers R0 Function descriptor
R1 - R3 Parameters
R4 - R11 Not used
R12 CAA address
R13 Caller's DSA
R14 Return address
R15 Entry point (CEEVROND)
NAB + BC Parameter list
Output Registers R0 Not preserved
R1 - R3 Return value
R4 - R14 Unchanged
R15 Not preserved
CEEVROND
Call this CWI interface as follows:
L     15,CEECAACELV-CEECAA(,12)   Address of CAA in R12
L     15,3408(,15)
BALR  14,15
This CWI will return control to its invoker at the return address:
BR    14
Function descriptor
A 24 byte function descriptor that contains the environment and entry point for the XPLINK routine to be invoked at offset +16 ('10'x).
Parameter List
The parameter list for the routine to be invoked.
Note: CEEVROND has a stub called @@ROND.