User`s guide

MACRO Support for 64-Bit Addressing
5.1 Components for 64-Bit Addressing
Table 5–1 Components for 64-Bit Addressing
Component Description
$SETUP_CALL64 Macro that initializes the call sequence.
$PUSH_ARG64 Macro that does the equivalent of argument
pushes.
$CALL64 Macro that invokes the target routine.
$IS_32BITS Macro for checking the sign extension of the low
32 bits of a 64-bit value.
$IS_DESC64 Macro for determining if descriptor is a 64-bit
format descriptor.
QUAD=NO/YES Parameter for page macros to support 64-bit
virtual addresses.
/ENABLE=QUADWORD QUADWORD parameter extended to include
64-bit address computations.
.CALL_ENTRY QUAD_
ARGS=TRUE | FALSE
QUAD_ARGS=TRUE | FALSE indicates the
presence or absence of quadword references to the
argument list. See Section 5.3.
.ENABLE QUADWORD
.DISABLE QUADWORD
QUADWORD parameter extended to include
64-bit address computations.
EVAX_SEXTL Built-in for sign-extending the low 32 bits of a
64-bit value into a destination.
EVAX_CALLG_64 Built-in to support 64-bit calls with variable-size
argument lists.
$RAB64 and $RAB64_STORE RMS macros for using buffers in 64-bit address
space.
5.2 Passing 64-Bit Values
The method that you use for passing 64-bit values depends on whether the size
of the argument list is fixed or variable. These methods are described in this
section.
5.2.1 Calls with a Fixed-Size Argument List
For calls with a fixed-size argument list, use the macros shown in Table 5–2.
Table 5–2 Passing 64-Bit Values with a Fixed-Size Argument List
For this step... Use this macro...
1. Initialize the call sequence $SETUP_CALL64
2. ‘‘Push’’ the call arguments $PUSH_ARG64
3. Invoke the target routine $CALL64
An example of using these macros follows. Note that the arguments are pushed
in reverse order, which is the same way a 32-bit PUSHL instruction is used:
MOVL 8(AP), R5 ; fetch a longword to be passed
$SETUP_CALL64 3 ; Specify three arguments in call
$PUSH_ARG64 8(R0) ; Push argument #3
$PUSH_ARG64 R5 ; Push argument #2
$PUSH_ARG64 #8 ; Push argument #1
$CALL64 some_routine ; Call the routine
5–2 MACRO Support for 64-Bit Addressing