CSTRMV TITLE ' CSTRMV --MOVE TRAC#00000010 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** E FROM INPUT ARRAY TO OUTPUT.' 00000020 *TITLECSTRMV -- MOVE TRACE FROM INPUT ARRAY TO OUTPUT ARRAY 00000030 *A AUTHOR FRANCIS COLLINS 00000040 *A DESIGNER SAME 00000050 *A LANGUAGE S/370 ASSEMBLER F 00000060 *A SYSTEM IBM (SEE CRAY) 00000060 *A WRITTEN 5- 6-75 00000070 * REVISED MO-DA-YR BY PROGRAMMER FOR REASON. 00000080 * REVISED 00000090 *A 00000100 *A 00000110 *A CALL CSTRMV (MCINH, PTTBLK, MCOH) 00000120 *A INPUT MCINH = ADDRESS OF INPUT TRACE ARRAY. A4 00000130 *A INPUT PTTBLK = NUMBER OF BYTES IN TRACE ARRAY. I4 00000140 *A OUTPUT MCOH = ADDRESS OF OUTPUT TRACE ARRAY. A4 00000150 *A 00000160 *A 00000164 *A 00000165 *A THIS PROGRAM MOVES THE INPUT TRACE ARRAY TO THE OUTPUT TRACE 00000170 *A ARRAY. THIS ACTION OCCURS WHEN A PROCESSING PROGRAM SETS THE 00000180 *A RETURN FLAG EQUAL TO TWO (KPRTF = 2). AN ASSEMBLER PROGRAM IS 00000190 *A NEEDED BECAUSE THE CALLING PROGRAM CSEXEC HAS AVAILABLE THE 00000200 *A ACTUAL ABSOLUTE ADDRESSES OF THE ARRAYS, AND THE FORTRAN PROGRAM 00000210 *A CANNOT HANDLE THESE ADDRESSES DIRECTLY, NOR CAN IT PUT THEM IN A 00000220 *A SUITABLE PARAMETER LIST FOR A FORTRAN SUBROUTINE. 00000230 *A 00000234 *A THIS PROGRAM WORKS ONLY IN CONJUNCTION WITH CSEXEC. 00000235 *A IT IS NOT A GENERAL-PURPOSE MOVE PROGRAM. 00000236 *A 00000237 *A WARNING. THIS PROGRAM CANNOT BE CALLED BY A FORTRAN PROGRAM. 00000238 *AEND 00000239 EJECT 00000240 * THE FOLLOWING NUMERICAL EXAMPLE SHOWS HOW THE ADDRESSES ARE 00000250 * MANIPULATED BOTH IN CSEXEC AND IN THIS PROGRAM. 00000260 * 00000270 * OPERATION VARIABLE ADDRESS CONTENTS 00000280 * 00000290 * GIVEN MCINH 218 30000 00000300 * MCOH 220 50000 00000310 * PTTBLK 38C 6384 00000320 * IN CSEXEC 00000330 * CALL CSTRMV (MCINH, PARM1 15000 218 00000340 * PTTBLK, PARM2 15004 38C 00000350 * MCOH) PARM3 15008 220 00000360 * REG 1 15000 00000370 * PARM1 TO PARM3 ARE CONSECUTIVE 00000380 * LOCATIONS ASSIGNED IN CSEXEC BY 00000390 * THE FORTRAN COMPILER. 00000400 * IN CSCALL 00000410 * LM R2,R5,0(R1) 0(,R1) 15000 218 00000420 * 4(,R1) 15004 38C 00000430 * 8(,R1) 15008 220 00000440 * REG R2 218 00000450 * REG R3 38C 00000460 * REG R4 220 00000470 * 00000480 * L R2,0(,R2) 0(,R2) 218 30000 00000490 * REG R2 30000 00000500 * REG 15 20000 00000510 * 00000520 * L R3,0(,R3) 0(,R3) 38C 6384 00000530 * REG 3 6384 00000540 * 00000550 * L R4,0(,R4) 0(,R4) 220 50000 00000560 * REG 4 50000 00000570 * 00000580 * LR R5,R3 REG 5 6384 00000590 * 00000600 * MVCL R4,R2 MOVE 6384 BYTES FROM 30000 TO 50000. 00000610 * MVCL USES TWO EVEN/ODD PAIRS OF REGISTERS, 00000620 * (R2, R3) = (SOURCE, LENGTH) = (30000, 6384), 00000630 * (R4, R5) = (DESTINATION, LENGTH) = (50000, 6384). 00000640 EJECT 00000650 CSTRMV CSECT 00000660 R1 EQU 1 00000670 R2 EQU 2 00000680 R3 EQU 3 00000690 R4 EQU 4 00000700 R5 EQU 5 00000710 R13 EQU 13 00000720 R14 EQU 14 00000730 R15 EQU 15 00000740 USING *,R15 00000750 B START BRANCH AROUND NAME. 00000760 DC AL1(6),CL7'CSTRMV ' 00000770 START STM R2,R5,28(R13) 00000780 LM R2,R5,0(R1) LOAD PARAMETER ADDRESSES. 00000790 L R2,0(,R2) R2 = SOURCE FOR MOVE. 00000800 L R3,0(,R3) R3 = LENGTH OF MOVE (BYTES). 00000810 L R4,0(,R4) R4 = DESTINATION FOR MOVE. 00000820 LR R5,R3 R5 = R3 = LENGTH. 00000830 MVCL R4,R2 EVEN/ODD PAIRS, 00000840 LM R2,R5,28(R13) (R2,R3) = (SOURCE, LENGTH), 00000850 SR R15,R15 (R4,R5) = (DESTINATION, LENGTH). 00000860 BR R14 00000870 END 00000880