VMS Help
RTL Routines, OTS$, OTS$JUMP_TO_BPV
*Conan The Librarian
|
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 ,...
None.
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).
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.