This topic describes
the Language Environment XPLINK protocols
for passing arguments to external routines. XPLINK is a
linkage convention which differs substantially from the standard Language Environment linkage
and FASTLINK linkage protocols. The Language Environment XPLINK protocols
are compatible with the 64–bit environment.
The primary goal of
XPLINK is to
make subroutine calls as fast and efficient as possible by removing
all nonessential instructions from the main path. This is achieved
by introducing the following:
- growing the stack from higher to lower addresses ("negative-"
or "downward-growing")
- to eliminate overhead in stack frame allocation
- to eliminate need for inline stack overflow check
- to allow for an improved epilog
- to allow addressability to information (such as parameters) in
the caller's stack frame
- biasing the stack pointer (by 2048 bytes), so that small functions
can save registers in their own stack frame before updating the stack
pointer, avoiding address generation interlocks
- reassignment of registers (see "Register Conventions" on page
17) to support more efficient saving and restoring of registers in
function prologs and epilogs
- parameter passing in registers, accepting return values in registers
- elimination of Inter-language Call (ILC) overhead (marking of
stack frame) for non-ILC calls
- faster call sequences for inter-module calls
- passing the address of the data area associated with a function,
its "environment", to the function on entry
- no branching around CEL words
- use of relative branching for function calls where possible
- unification of the various (RENT and NORENT, DLL and NODLL) function
pointer implementations, reducing the costs of all operations involving
function pointers
An important additional goal is the reduction in size of the function
in memory. This is accomplished by eliminating unused information
in function control blocks.
XPLINK applications are supported under IMS™ and LRR (Language Routine Retention).