User`s guide

Macros for 64-Bit Addressing
$CALL64
Description
This macro calls the specified routine, assuming $SETUP_CALL64 has been used
to specify the argument count, and $PUSH_ARG64 has been used to push the
quadword arguments. This macro checks that the number of pushes matches
what was specified in the setup call.
The call_target operand must not be AP- or SP-based.
E.2 Macros for Checking Sign Extension and Descriptor Format
These macros are used for checking certain values and directing program flow
based on the outcome of the check:
$IS_32BITS
$IS_DESC64
$IS_32BITS
Checks the sign extension of the low 32 bits of a 64-bit value and directs the
program flow based on the outcome of the check.
Format
$IS_32BITS quad_arg, leq_32bits, gtr_32bits, temp_reg=22
Parameters
quad_arg
A 64-bit quantity, either in a register or in an aligned quadword memory location.
leq_32bits
Label to branch to if quad_arg is a 32-bit sign-extended value.
gtr_32bits
Label to branch to if quad_arg is greater than 32 bits.
temp_reg=22
Register to use as a temporary register for holding the low longword of the source
value—R22 is the default.
Description
$IS_32BITS checks the sign extension of the low 32 bits of a 64-bit value and
directs the program flow based on the outcome of the check.
Examples
1.
$is_32bits R9, 10$
In this example, the compiler checks the sign extension of the low 32 bits of
the 64-bit value at R9 using the default temporary register, R22. Depending
on the type of branch and the outcome of the test, the program either
branches or continues in line.
E–4 Macros for 64-Bit Addressing