User`s guide

MACRO Compiler Directives
.BRANCH_UNLIKELY
knows it is a rare case, so the directive is used to change the branch to a forward
branch, which is predicted not taken.
.CALL_ENTRY
Declares the entry point of a called 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.
Format
.CALL_ENTRY [max_args=number] [,home_args=TRUE | FALSE]
[,quad_args=TRUE | FALSE] [,input] [,output] [,scratch] [,preserve]
[,label]
Parameters
max_args=number
Maximum number of arguments the called procedure expects. The compiler uses
this value as the number of longwords it allocates in the fixed temporary region of
the stack frame, if the argument list must be homed. If homing is not necessary,
the max_args count is not required. The compiler flags procedure entry points,
where max_args has not been specified, that require homed argument lists.
Note that, for .CALL_ENTRY routines in which max_args exceeds 14, the
compiler uses the received argument count, or max_args, whichever is smaller,
when homing the argument list.
home_args=TRUE | FALSE
Indication to the compiler that the called procedure’s argument list should or
should not be homed. The home_args argument overrides the compilers default
logic , as explained in Section 2.4.1, for determining the circumstances under
which an argument list must be homed.
quad_args=TRUE | FALSE
Indication to the compiler that the called procedure’s argument list will have
quadword references.
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.
B–4 Specialized Directives