HELPLIB.HLB  —  RTL Routines, OTS$  OTS$JUMP_TO_BPV
    I64 only.

    The Jump to Bound Procedure Value routine transfers control to a
    bound procedure.

    Format

      OTS$JUMP_TO_BPV  bound-func-value ,standard-args ,...

1  –  Returns

    None.

2  –  Arguments

 bound-func-value

    OpenVMS usage:quadword address
    type:         address
    access:       read only
    mechanism:    by value in register R1 (GP)
    Function value for the procedure being called.

 standard-args

    type:
    access:
    mechanism:    0
    Zero or more arguments to be passed to the called routine, passed
    using standard conventions (including the AI register).

3  –  Description

    When a procedure value that refers to a bound procedure
    descriptor is used to make a call, the routine designated in
    the OTS_ENTRY field (typically OTS$JUMP_TO_BPV) receives control
    with the GP register pointing to the bound procedure descriptor
    (instead of a global offset table). This routine performs the
    following steps:

    1. Load the "real" target entry address into a volatile branch
       register, for example, B6.

    2. Load the dynamic environment value into the appropriate
       uplevel-addressing register for the target function, for
       example, OTS$JUMP_TO_BPV uses R9.

    3. Load the "real" target GP address into the GP register

    4. Transfer control (branch, not call) to the target entry
       address.

    Control arrives at the real target procedure address with both
    the GP and environment register values established appropriately.

    Support routine OTS$JUMP_TO_BPV is included as a standard library
    routine. The operation of OTS$JUMP_TO_BPV is logically equivalent
    to the following code:

       OTS$JUMP_TO_BPV::
            add     gp=gp,24        ; Adjust GP to point to entry address
            ld8     r9=[gp],16      ; Load target entry address
            mov     b6=r9
            ld8     r9=[gp],-8      ; Load target environment value
            ld8     gp=[gp]         ; Load target GP
            br      b6              ; Transfer to target

    Note that there can be multiple OTS$JUMP_TO_BPV-like support
    routines, corresponding to different target registers where
    the environment value should be placed. The code that creates
    the bound function descriptor is also necessarily compiled by
    the same compiler that compiles the target procedure, thus can
    correctly select an appropriate support routine.

4  –  Condition Values Returned

    None.
Close Help