;%%A-RCB-0047-SL-18-6 RATFOR LIBRARY TIMING ROUTINE TIMER .TITLE TIMER .IDENT "V1" ; ; TIME FORTRAN PROGRAMS BY AST'ING EVERY TIC AND CHECKING TRACEBACK ; CHAIN TO SEE WHAT FORTRAN ROUTINE IS EXECUTING. SUBROUTINE TIMERX ; IS CALLED BY SYSTEM AT END OF FORTRAN PROGRAM TO PRINT STATISTICS. ; AC0=%0 .MACRO PUSH,LIST .IRP X, MOV X,-(SP) .ENDR .ENDM .MACRO POP,LIST .IRP X, MOV (SP)+,X .ENDR .ENDM .MACRO FCALL,NAME,LIST ;FORTRAN SUBROUTINE CALL MOV #LIST,R5 JSR PC,NAME .ENDM .MCALL MRKT$S,ASTX$S ; .PSECT TIMERC,GBL,OVR,RW,D TABSIZ=800. ;800 BYTES (200 REALS) PER TABLE TABLE: .BLKB TABSIZ ;RAD50 SIX LETTER ROUTINE NAMES .BLKB TABSIZ ;REAL COUNT TICS: .FLT2 0.0 ;TOTAL NUMBER OF PROBES NUMNAM: .WORD 0 ;NUMBER OF DIFFERENT ROUTINES ELAPSD: .FLT2 0.0 ;ELAPSED TIME SINCE START OF TIMER FN: .BLKB 41. ;FILE NAME FOR TIMING INFO SUMMARY .PAGE .PSECT TIMER ARGL: .WORD 1,TIMERX ;ARG LIST TO CALL USEREX ARGL2: .WORD 1,ZERO ;ARG LIST TO CALL SECNDS ONE: .FLT2 1.0 ZERO: .FLT2 0.0 SAVEFP: .BLKW 3 ;FPP SAVE AREA SAVE2: .BLKW 3 ;FPP SAVE AREA FOR TIMEIN ROUNAM: .BLKW 2 ;SET ROUNAM NON-ZERO TO BEGIN FORCING ALL ;TICS TO BE RECORDED UNDER ROUNAM. SEE TIMEIN. TIMER:: PUSH ;INITIALIZE ENTRYPOINT CLR NUMNAM ;TABLE IS EMPTY CLR ROUNAM ;NORMAL RECORDING OF TICS CLR ROUNAM+2 ;HO-HUM CLR TICS ;NO TICS CLR TICS+2 ;MAKE SURE ; TST (R5)+ ;ANY ARGS? BNE 10$ ;YES - GO HANDLE MOVB #'L,FN ;SET FILE NAME TO L ... MOVB #'P,FN+1 ; P ... MOVB #':,FN+2 ; : ... CLRB FN+3 ;PUT IT ALL TOGETHER AND YOU GET LP: ! BR 20$ ; 10$: MOV (R5)+,R0 ;PUT ADDRESS OF HIS FILE ARG IN R0 MOV #FN,R1 ;AND MY STORE AREA FOR FILE ARG MOV #40.,R5 ;NO MORE THAN 40 CHARS MOVED 15$: MOVB (R0)+,(R1)+ ;NEXT CHAR BEQ 20$ ;DONE IF MOVED END OF STRING INDICATOR SOB R5,15$ ;ELSE IF MORE ROOM, GO MOVE MORE CLRB (R1) ;40 CHARS - EOS STRING IN 41ST ; 20$: FCALL SECNDS ;RECORD ELAPSED TIME MOV R0,ELAPSD ;SAVE FIRST HALF OF START TIME MOV R1,ELAPSD+2 ;SECOND HALF FCALL USEREX ;CALL TIMERX BEFORE EXITING POP MRKT$S ,#1,#1,#TIME ;WAKE ME UP IN 1 TIC RTS PC ;SO LONG, IT'S BEEN GOOD TO KNOW YOU .PAGE ;%^ ; USE CALL TIMEIN(RAD50('NAME')) TO FORCE ALL FURTHER TICS TO BE RECORDED ; UNDER NAME. CALL BEFORE DOING I/O. RETURN TO NORMAL RECORDING WITH ; CALL TIMEIN (NO PARAMETERS) ; NOTE: -----> ASSUMES ARGUMENT IS ON EVEN BOUNDARY <------ ; TIMEIN:: TSTB (R5) ;ANY PARAMETERS? BNE 10$ ;YES - GO HANDLE CLR ROUNAM ;GO TO NORMAL RECORDING CASE ;ONLY ONE INSTRUCTION ON ROUNAM-NO NEED ;FOR CRITICAL REGION RTS PC ;DONE ; 10$: PUSH R5 ;JUST TO BE SAFE STFPS SAVE2 SETF STF AC0,SAVE2+2 TST (R5)+ ;PAST GARBAGE WORD STARTING ARG LIST LDF @(R5)+,AC0 ;PUT RAD50 ROUTINE NAME IN AC0 STF AC0,ROUNAM ;AND PUT IT IN ROUNAM ;USING REALS AVOIDS A CRITICAL REGION ON ROUNAM LDF SAVE2+2,AC0 LDFPS SAVE2 POP R5 ;RESTORE RTS PC ;DONE .PAGE TIME: TST NUMNAM BMI 60$ ;TIMERX SETS NUMNAM=-1 TO STOP ME PUSH STFPS SAVEFP SETF STF AC0,SAVEFP+2 MOV ROUNAM+2,R1 MOV ROUNAM,R0 ;FIRST PART OF FORCED RECORDING ROUTINE NAME BNE 5$ ;IF NON-ZERO, WE ARE IN FORCED RECORDING MOV $NAMC,R2 ;POINTER TO CURRENT ROUTINE NAME MOV 4(R2),R0 ;FIRST HALF NAME MOV 4+2(R2),R1 ;SECOND HALF NAME 5$: MOV #TABLE,R3 ;ADDRESS OF NAMES TABLE MOV NUMNAM,R2 ;NUMBER OF ROUTINE IN TABLE BEQ 20$ ;NONE THERE - JUMP ; 10$: CMP (R3)+,R0 ;GOT 1ST HALF OF NAME? BNE 15$ ;NOPE - LOOP CMP (R3)+,R1 ;GOT 2ND HALF OF NAME? BEQ 30$ ;YES - BREAK BR 17$ ;SKIP OVER BUMPING OF R3 15$: TST (R3)+ ;SKIP OVER SECOND HALF 17$: SOB R2,10$ ;AND GO CHECK NEXT NAME ; 20$: CMP NUMNAM,#TABSIZ/4 ;TOO MANY ROUTINES? BGE 50$ ;YES - ADD NO MORE MOV R0,(R3)+ ;OFF THE END OF THE TABLE MOV R1,(R3)+ ;SAVE BOTH PARTS OF NAME AND THEN... ADD #TABSIZ-4.,R3 ;TO CORRESPONDING ENTRY IN COUNTS TABLE LDF ONE,AC0 ;GET READY TO ... STF AC0,(R3) ;PUT 1.0 IN COUNT INC NUMNAM ;NEW ROUTINE NAME SO BUMP COUNT BR 50$ 30$: ADD #TABSIZ-4,R3 ;TO CORRESPONDING ENTRY IN COUNTS TABLE LDF (R3),AC0 ;HIT IN THE TABLE ADDF ONE,AC0 ;BUMP THE COUNT STF AC0,(R3) ;AND SAVE IT 50$: LDF TICS,AC0 ;GET NUMBER OF PROBES COUNT ADDF ONE,AC0 ;BUMP IT STF AC0,TICS ;AND SAVE IT LDF SAVEFP+2,AC0 ;RESTORE AC0 STATUS LDFPS SAVEFP ;RESTORE FPP STATUS POP MRKT$S ,#1,#1,#TIME ;SEE YOU AGAIN SOON 60$: TST (SP)+ ;POP MRKT$S EVENT FLAG NUMBER ASTX$S ;BUT FOR NOW, GOOD BYE .END