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.