User`s guide
MACRO Support for 64-Bit Addressing
5.5 Sign-Extending and Checking
The following examples are all legal uses:
evax_sextl r1,r2
evax_sextl r1,(r2)
evax_sextl (r2), (r3)[r4]
As shown by these examples, the operands are not required to be registers.
A macro, $IS_32BITS, is available for checking the sign extension of the low 32
bits of a 64-bit value. It is described in Appendix E.
5.6 Alpha Instruction Built-ins
The compiler supports many Alpha instructions as built-ins. Many of these built-
ins (available since the compiler first shipped) can be used to operate on 64-bit
quantities. The function of each built-in and its valid operands are documented
in Appendix C.
Note that many of these built-ins have been retained on OpenVMS I64, where
they emulate the same behavior using one or more Itanium instructions.
5.7 Calculating Page-Size Dependent Values
A parameter, QUAD=NO/YES, for supporting 64-bit virtual addresses is available
for each of the page macros, as shown in the following list:
• $BYTES_TO_PAGES
• $NEXT_PAGE
• $PAGES_TO_BYTES
• $PREVIOUS_PAGE
• $START_OF_PAGE
These macros provide a standard, architecture-independent means for calculating
page-size dependent values. For more information about these macros, see
Appendix D.
5.8 Creating and Using Buffers in 64-Bit Address Space
The $RAB and $RAB_STORE control block macros have been extended for
creating and using data buffers in 64-bit address space. The 64-bit versions are
named $RAB64 and $RAB64_STORE, respectively. The rest of the RMS interface
is restricted to 32 bits at this time. For more information about $RAB64 and
$RAB64_STORE, see the HP OpenVMS Programming Concepts Manual, Volume
I.
5.9 Coding for Moves Longer Than 64 KB
The MACRO instructions MOVC3 and MOVC5 properly handle 64-bit addresses
but the moves are limited to a 64 KB length. This limitation occurs because
MOVC3 and MOVC5 accept word-sized lengths.
For moves longer than 64 KB, use OTS$MOVE3 and OTS$MOVE5. OTS$MOVE3
and OTS$MOVE5 accept longword-sized lengths. (LIB$MOVC3 and LIB$MOVC5
have the same 64 KB length restriction as MOVC3 and MOVC5.)
An example of replacing MOVC3 with OTS$MOVE3 follows.
MACRO Support for 64-Bit Addressing 5–7