User`s guide

MACRO Compiler Directives
.JSB_ENTRY
This register set also informs the compiler that the registers specified have
meaningful values at routine exit and are unavailable for use as temporary
registers even after the last 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 output in the output argument, the compiler may use the register as a
temporary register, corrupting the output value.
scratch=<>
Register set that indicates registers that are used within the routine but which
should not be saved and restored at routine entry and exit. The caller of the
routine does not expect to receive output values nor does it expect the registers
to be preserved. Registers included in this register set are not saved and restored
by the compiler, even if they are modified by the routine.
On OpenVMS Alpha systems, the compiler may use registers R13 and above as
temporary registers if they are unused in the routine source code. Because R13
through R15 must be preserved, if modified, on OpenVMS Alpha systems, the
compiler preserves those registers if it uses them.
However, if they appear in the scratch register set declaration, the compiler
will not preserve them if it uses them as temporary registers. As a result, these
registers may be scratched at routine exit, even if they were not used in the
routine source but are in the scratch set. If the VAXREGS (OpenVMS Alpha
only) optimization is used, this applies to registers R2 through R12, as well.
On OpenVMS I64 systems, the compiler will not use these registers as temporary
registers.
preserve=<>
Register set that indicates those registers that should be preserved over the
routine call. This should include only those registers that are modified and whose
full 64-bit contents should be saved and restored.
This register set causes registers to be preserved whether or not they would have
been preserved automatically by the compiler. Note that because R0 and R1 are
scratch registers, by calling standard definition, the compiler never saves and
restores them unless you specify them in this register set.
This register set overrides the output and scratch register sets. If you specify a
register both in the preserve register set and in the output or scratch register
sets, the compiler will report the following warning:
%AMAC-W-REGDECCON, register declaration conflict in routine A
Note
For procedures declared with the .JSB_ENTRY directive, the MACRO
compiler automatically generates a null frame procedure descriptor on
OpenVMS Alpha.
Specialized Directives B–13