User`s guide
MACRO Support for 64-Bit Addressing
5.9 Coding for Moves Longer Than 64 KB
Code using MOVC3:
MOVC3 BUF$W_LENGTH(R5), (R6), OUTPUT(R7) ; Old code, word length
The equivalent 64-bit code with longword length:
$SETUP_CALL64 3 ; Specify three arguments in call
EVAX_ADDQ R7, #OUTPUT, R7
$PUSH_ARG64 R7 ; Push destination, arg #3
$PUSH_ARG64 R6 ; Push source, arg #2
MOVL BUF$L_LENGTH(R5), R16
$PUSH_ARG64 R16 ; Push length, arg #1
$CALL64 OTS$MOVE3
MOVL BUF$L_LENGTH(R5), R16
EVAX_ADDQ R6, R16, R1 ; MOVC3 returns address past source
EVAX_ADDQ R7, R16, R3 ; MOVC3 returns address past destination
Because MOVC3 clears R0, R2, R4, and R5, make sure that these side effects are
no longer needed.
OTS$MOVE3 and OTS$MOVE5 are documented with other LIBOTS routines in
the HP OpenVMS RTL General Purpose (OTS$) Manual.
5–8 MACRO Support for 64-Bit Addressing