CLOK TITLE ' CLOCK AND CUMTIM' 00000100 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** * 00000200 *AINDMCLOCK -- CPU TIME--CURRENT, ELAPSED, CUMULATIVE 00000301 *TITLE CLOCK -- CPU TIME--CURRENT, ELAPSED, CUMULATIVE 00000401 *A 00000500 *A SYSTEMS PROGRAM SYS1.SUBLIB 00000600 *A MAINTAINED BY RESEARCH AND DEVELOPMENT 00000700 *A AUTHOR FRANCIS COLLINS 00000800 *A LANGUAGE S/360 ASSEMBLER 00000900 *A WRITTEN 1-16-70 00001000 *A 00001100 *A REVISED 1-11-85 RSK. CHANGED SOURCE OF TIMING INFORMATION FROM 00001200 *A A 'STIMER' TO RETRIEVING IT FROM THE TIMING 00001300 *A FIELDS IN THE ASCB. 00001400 *A THE NEW PROGRAM WILL RESIDE ON THE SPARC 00001500 *A LIBRARIES INSTEAD OF 'SYS1.SUBLIB' 00001600 *A 00001700 *A CALL CLOCK (D, T) 00001800 *A OUTPUT D = ELAPSED TIME SINCE LAST CLOCK CALL WHICH I4 00001900 *A USED T AS THE SECOND ARGUMENT. THE FIRST TIME 00002000 *A A PARTICULAR T IS USED, D WILL BE MEANINGLESS. 00002100 *A INPUT T = TIME AT WHICH LAST CLOCK CALL WAS MADE I4 00002200 *A WITH T AS THE SECOND ARGUMENT. 00002300 *A OUTPUT T = PRESENT TIME. I4 00002400 *A 00002500 *A 00002600 *A THE PROGRAM FIRST OBTAINS THE PRESENT TIME P, WHICH IS 00002700 *A THE TIME SINCE THE VERY FIRST CLOCK CALL IN THE PROGRAM. 00002800 *A THEN, 00002900 *A D = P - T, 00003000 *A T = P. 00003100 *A 00003200 *A NOTES: 00003300 * THE MACROS USED IN THIS PROGRAM ARE STIMER AND TIMER. 00003400 *A ENTRY POINTS ARE CLOCK AND CUMTIM. 00003500 *A THE ARGUMENTS ARE FULLWORD BINARY INTEGERS. 00003600 *A TIMES ARE IN CENTISECONDS. 00003700 *A 00003800 *A SEE CUMTIM FOR FURTHER NOTES AND EXAMPLES. 00003900 *A 00004000 *AEND 00004100 *TITLE CUMTIM -- CALCULATES CUMULATIVE TIME 00004200 *A 00004300 *A SYSTEM PROGRAM SYS1.SUBLIB 00004400 *A MAINTAINED BY RESEARCH AND DEVELOPMENT 00004500 *A AUTHOR FRANCIS COLLINS 00004600 *A LANGUAGE S/360 ASSEMBLER 00004700 *A WRITEN 1-16-70 00004800 *A 00004900 *A 00005000 *A CALL CUMTIM (C, D, T) 00005100 *A OUTPUT C = CUMULATIVE TIME (SEE BELOW) I4 00005200 *A OUTPUT D = ELAPSED TIME (SAME AS IN CLOCK) I4 00005300 *A IN/OUT T = OLD TIME/NEW TIME (SAME AS IN CLOCK) I4 00005400 *A 00005500 *A 00005600 *A PROGRAM FIRST OBTAINS PRESENT TIME P, AS IN CLOCK, AND 00005700 *A THEN CARRIES OUT THE FOLLOWING OPERATIONS: 00005800 *A D = P - T, 00005900 *A T = P, 00006000 *A C = C + D. 00006100 *A 00006200 *A RELATED PROGRAMS ARE EBCT (EBCTIM) AND DATM (DATIME). 00006300 *A 00006400 *A NOTES ON USE OF THE CLOCK AND CUMTIM PROGRAMS. 00006500 *A (1) TO TIME A COMPLETE PROGRAM, CALL CLOCK AT THE BEGINNING AND 00006600 *A AT THE END, USING THE SAME SECOND ARGUMENT T IN BOTH CALLS. 00006700 *A DO NOT USE THIS ARGUMENT T ANYWHERE ELSE. AFTER THE CALL AT 00006800 *A THE END, ARGUMENT T (AND D ALSO) WILL CONTAIN THE TOTAL 00006900 *A CENTRAL PROCESSING UNIT TIME FOR THE PROGRAM. 00007000 *A 00007100 *A (2) TO TIME A SECTION OF THE PROGRAM, USE DIFFERENT VARIABLES IN 00007200 *A THE CALLS. EXAMPLE: 00007300 *A CALL CLOCK (DX, TX) 00007400 *A SECTION X OF PROGRAM. 00007500 *A CALL CLOCK (DX, TX) 00007600 *A ARGUMENT DX NOW CONTAINS THE EXECUTION TIME FOR SECTION X OF 00007700 *A THE PROGRAM. THE ARGUMENTS DX AND TX ARE INDEPENDENT OF ANY 00007800 *A OTHER ARGUMENTS USED IN OTHER CLOCK CALLS. FOR EXAMPLE, 00007900 *A SUPPOSE SECTION W IS A LARGER SECTION OF THE PROGRAM WHICH 00008000 *A CONTAINS SECTION X. A DIFFERENT VARIABLE TW COULD BE USED 00008100 *A TO TIME SECTION W. THE EXECUTION TIME FOR SECTION W WOULD 00008200 *A OF COURSE INCLUDE THE TIME FOR SECTION X. 00008300 *A 00008400 *A (3) TO TIME A PROGRAM SECTION, SUCH AS A SUBPROGRAM, WHICH 00008500 *A OCCURS IN SEVERAL DIFFERENT PLACES, USE CLOCK AND CUMTIM 00008600 *A AS IN THE FOLLOWING EXAMPLE: 00008700 *A CALL CLOCK (DS, TS) 00008800 *A SECTION S OF PROGRAM. 00008900 *A CALL CUMTIM (CS, DS, TS) 00009000 *A THE TIME FOR EACH PASS THROUGH SECTION S WILL BE ADDED 00009100 *A TO THE VARIABLE CS. CS MUST BE SET TO ZERO IN THE PRE- 00009200 *A LIMINARY OPERATIONS SECTION OF THE PROGRAM. 00009300 *AEND 00009400 * 00009500 R0 EQU 0 00009600 R1 EQU 1 00009700 R2 EQU 2 00009800 R3 EQU 3 00009900 R4 EQU 4 00010000 R5 EQU 5 00010100 R6 EQU 6 00010200 R7 EQU 7 00010300 R8 EQU 8 00010400 R9 EQU 9 00010500 R10 EQU 10 00010600 R11 EQU 11 00010700 R12 EQU 12 00010800 R13 EQU 13 00010900 R14 EQU 14 00011000 R15 EQU 15 00011100 EJECT 00011200 ENTRY CUMTIM 00011300 * CALL CLOCK (D,T) 00011400 CLOCK CSECT 00011500 USING CLOCK,R15 00011600 B A BRANCH AROUND NAME. 00011700 DC X'05' 00011800 DC C'CLOCK ' 00011900 A STM R14,R12,12(R13) SAVE ALL REGISTERS EXCEPT 13. 00012000 LM R4,R5,0(R1) ESTABLISH BASE REGISTERS FOR ARGUMENTS. 00012100 * 0(R4) = D 00012200 * 0(R5) = T 00012300 LA R12,SAVE ESTABLISH BASE FOR THIS PROGRAM. 00012400 LA R11,F EXIT ADDRESS FROM COMMON SECTION. 00012500 B B BRANCH TO COMMON SECTION B-C-D. 00012600 SPACE 00012700 * CALL CUMTIM (C, D, T) 00012800 USING *,R15 00012900 CUMTIM B CUMTIME BRANCH AROUND NAME. 00013000 DC X'06' 00013100 DC C'CUMTIM ' 00013200 CUMTIME STM R14,R12,12(R13) SAVE ALL REGISTERS EXCEPT 13. 00013300 LM R3,R5,0(R1) ESTABLISH BASE REGISTERS FOR ARGUMENTS. 00013400 * 0(R3) = C 00013500 * 0(R4) = D 00013600 * 0(R5) = T 00013700 LA R12,SAVE ESTABLISH BASE FOR THIS PROGRAM. 00013800 LA R11,E EXIT ADDRESS FROM COMMON SECTION. 00013900 B B BRANCH TO COMMON SECTION B-C-D. 00014000 EJECT 00014100 SAVE DS 18F 00014200 SPACE 00014300 * SECTIONS B, C, AND D ARE COMMON TO BOTH ENTRY POINTS. 00014400 USING SAVE,R12 00014500 B ST R12,8(R13) SEND SAVE AREA ADDRESS TO CALLING PROGRAM. 00014600 ST R13,SAVE+4 SAVE REGISTER 13 IN LOCAL SAVE AREA. 00014700 LR R13,R12 PUT LOCAL SAVE AREA ADDRESS IN 13. 00014800 * 00014900 * 00015000 XR R8,R8 00015100 USING PSA,R8 00015200 L R8,PSAAOLD LOAD ADDRESS OF ASCB 00015300 USING ASCB,R8 00015400 LM R6,R7,ASCBEJST LOAD ASCBEJST DOUBLE WORD 00015500 SRDL R6,12 CONVERT TO MICRO-SECONDS 00015600 D R6,TENTHOU CONVERT TO HUNDRETHS 00015700 LR R9,R7 SAVE IT IN R9 00015800 LM R6,R7,ASCBSRBT LOAD ASCBSRBT DOUBLE WORD 00015900 SRDL R6,12 CONVERT TO MICRO-SECONDS 00016000 D R6,TENTHOU CONVERT TO HUNDRETHS 00016100 AR R9,R7 ADD SRB TIME TO TCB TIME 00016200 * 00016300 CLI FSTCALL,C'Y' FIRST CALL TO THIS ROUTINE? 00016400 BNE NOTFST IF NOT, GO TO NOTFST 00016500 MVI FSTCALL,C'N' RESET THE SWITCH 00016600 ST R9,CPUFIRST SAVE THE VALUE FOR LATER REFERENCE 00016700 XR R10,R10 00016800 ST R10,0(R4) SET D=T=0 00016900 ST R10,0(R5) 00017000 B F 00017100 * 00017200 NOTFST EQU * 00017300 S R9,CPUFIRST 00017400 LR R2,R9 SAVE P IN R2. 00017500 S R9,0(R5) R9 = P - T = D. 00017600 ST R9,0(R4) 00017700 ST R2,0(R5) P REPLACES T. 00017800 BR R11 R11 = F FOR ENTRY CLOCK. 00017900 * R11 = E FOR ENTRY CUMTIM. 00018000 * END OF COMMON SECTIONS B, C, AND D. 00018100 SPACE 00018200 E A R9,0(R3) R9 = C + D = NEW C. 00018300 ST R9,0(R3) 00018400 SPACE 00018500 F L R13,SAVE+4 RESTORE REGISTERS AND EXIT. 00018600 LM R14,R12,12(R13) 00018700 BR R14 00018800 SPACE 00018900 DS 0F 00019000 CPUFIRST DC F'0' 00019100 TENTHOU DC F'10000' 00019200 FSTCALL DC C'Y' 00019300 * 00019400 PRINT NOGEN 00019500 IHAPSA 00019600 IHAASCB 00019700 CLOCK CSECT 00019800 LTORG 00019900 END 00020000