$CALL issues a call to another routine and performs the following
actions:
1. Searches a list of linkage pairs referenced in previous
invocations of the $CALL and $LINKAGE_PAIR macros. If a
linkage pair is already in the list, $CALL uses the linkage
pair from the previous invocation. Otherwise, $CALL stores
the linkage pair of the called routine in the caller's linkage
section and adds the linkage pair to the caller's list. If you
use $CALL within a routine defined with the $ROUTINE macro,
$CALL and $LINKAGE_PAIR reset the list of linkage pairs for
each routine.
2. Allocates stack space for arguments if necessary.
3. Generates instructions to load the arguments to the called
routine.
4. Sets the value in the argument information register, R25.
5. Generates the following instruction sequence to perform
the actual call based on the location of the linkage pair
generated from step 1 and the address specified or defaulted
with the LS argument. The register specified with the Rls
argument is assumed to point to the base of the linkage
section as shown in the following example:
LDQ R26, code_address_offset(Rls) ; load code address
LDQ R27, procedure_descriptor_address_offset(Rls) ; load
; procedure
; descriptor
; address
JSR R26, R26
6. Frees argument stack space, if any, and if the called routine
does not return a value on the stack.