VMS Help  —  MACRO  /ALPHA  Supplied Library Macros, $CALL  Description
    $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.
Close Help