User`s guide

MACRO Compiler Directives
.GLOBAL_LABEL
Labels declared with the .GLOBAL_LABEL directive can be used as the newpc
argument in calls to the $UNWIND (Unwind Call Stack) system service because
it allows the address of the label to be stored.
However, there is no provision in the compiler to automatically adjust the stack
pointer at such labels to remove arguments passed on the stack or compensate
for stack alignment. If the call stack is unwound back to an alternate PC in the
calling routine, the stack may still contain arguments and alignment bytes, and
any stack-based references that expect this adjustment to the caller’s original
stack depth (which happened automatically on VAX) will be incorrect.
Code that contains labels declared with this directive that are to be used as
alternate PC targets for $UNWIND must be examined carefully to ensure correct
behavior, with particular emphasis on any references based on the stack pointer.
.JSB_ENTRY
Declares the entry point of a JSB routine to the compiler. This entry declaration
will save and restore the full 64 bits of any registers (except R0 and R1) that
are modified by the routine and are not declared as scratch or output. See also
.JSB32_ENTRY.
Format
.JSB_ENTRY [input] [,output] [,scratch] [,preserve]
Parameters
input=<>
Register set that indicates those registers from which the routine receives input
values.
This register set informs the compiler that the registers specified have meaningful
values at routine entry and are unavailable for use as temporary registers even
before the first compiler-detected use of the registers. Specifying registers in this
register set affects compiler temporary register usage in two cases:
If you are using the VAXREGS (OpenVMS Alpha only) optimization option.
This optimization allows the compiler to use as temporary registers any of the
VAX registers which are not explicitly being used by the VAX MACRO code.
If you are explicitly using any of the Alpha or Itanium registers (R13 and
above).
In either of these cases, if you do not specify a register that is being used as
input in the input argument, the compiler may use the register as a temporary
register, corrupting the input value.
This register set has no effect on the compiler’s default register preservation
behavior. If you are not using the VAXREGS optimization switch or any of the
Alpha registers, the input mask is used only to document your routine.
output=<>
Register set that indicates those registers to which the routine assigns values
that are returned to the routine’s caller. Registers included in this register set are
not saved and restored by the compiler, even if they are modified by the routine.
B–12 Specialized Directives