.SBTTL INTRODUCTION ; ; TIMEIT ; ; ROUTINE TO PRODUCTION AN EXECUTION LOCALITY PROFILE. ; THIS ROUTINE IS CALLABLE FROM FORTRAN AND PRODUCES ; A HISTOGRAM SHOWING THE NUMBER OF TIMES THE PROGRAM ; BEING MESURED WAS CAUGHT IN EACH CELL. ; THE ROUTINE OPERATES BY SETTING AST EXITS AT USER ; SPECIFIED INTERVALS. THE PC IS THEN EXAMINED AND ; THE COUNT IN THE APPORIATE CELL OF THE USER ARRAY ; INCREMENTED. ; WHEN IT IS TIME TO OBTAIN RESULTS, SAMPLING MAY ; BE SUSPENDED USING THE IHAR MACRO. ; ; CALLING SEQUENCE ; ; ICODE=TIMEIT(IARRAY,ISIZE,ISTART,IFIN,ITICKS) ; ; WHERE: ; ICODE ERROR RETURN CODE ; 1 - OK ; -31 - INVALID ITICKS ; -32 - INVALID ISTART ; -33 - INVALID IFIN ; -34 - INVALID ISIZE ; -35 - INSUFFICIENT (OR MISSING) PARAMETER(S) ; OTHER VALUES ARE THOSE RETURNED BY MRKT$ ; IARRAY ARRAY TO COUNT INTO ; ARRAY(1) - COUNTS MISSED ; ARRAY(2....) - CELL COUNTS ; NOTE THAT IARRAY MUST BE ZEROED BY THE ; USER IF IT IS SO DESIRED ; ISIZE SIZE OF ARRAY (INCLUDING OVERFLOW WORD) ; ISTART - START (BYTE) ADDRESS ; IFIN FINISH (BYTE)ADDRESS ; ITICKS NUMBER OF CLOCK TICKS TO WAIT BETWEEN SAMPLES. ; ; COLLECTION OF DATA MAY BE TERMINATED BY ; CALLING TIMEST (NO PARAMETERS). ; ; .MCALL DIR$,CMKT$C,ASTX$S,MRKT$ .PAGE .SBTTL SETUP CODE TIMEIT:: TSTB (R5) ;VALID COUNT? BLE INVARG ;NO CMPB (R5),#5 ;... BGE 6$ ;OK INVARG= . MOV #-35.,R0 ;SET ERROR CODE RTS PC ;RETURN ; 6$: TST (R5)+ ;POINT AT IARRAY MOV (R5)+,R0 ;GET ADDRESS MOV R0,IARRAY ;AND SAVE INC R0 ;CHECK OK BEQ INVARG ;MISSING ARG MOV (R5)+,R0 ;GET A(ISIZE) MOV R0,R1 ;COPY INC R1 ;IS IT THERE? BEQ INVARG ;NO, MISSING ARG MOV (R0),R0 ;GET SIZE DEC R0 ;CHECK OK BGT 1$ ;OK MOV #-34.,R0 ;NO, INVALID ISIZE RTS PC ; 1$: MOV R0,SIZE ;NOTE SIZE MOV (R5)+,R0 ;GET A(ISTART) MOV R0,R1 ;COPY INC R1 ;WAS ISTART SPECIFIED BEQ INVARG ;NO, INVALID ADDRESS MOV (R0),R0 ;GET ISTART BIT #1,R0 ;LEGIT? BEQ 2$ ;YES MOV #-32.,R0 ;NO, ERROR RTS PC ; 2$: MOV R0,ISTART ;NOTE MOV (R5)+,R0 ;GET A(IFIN) MOV R0,R1 INC R1 ;WAS IFIN SPECIFIED? BEQ INVARG ;NO MOV (R0),R0 ;YES, GET IT BIT #1,R0 ;LEGIT? BEQ 3$ ;NO 5$: MOV #-33.,R0 ;ERROR RTS PC ; 3$: MOV R0,IFIN ;NOTE CMP R0,ISTART ;LARGER THAN ISTART? BLOS 5$ ;YES, INVALID MOV (R5)+,R0 ;GET A(ITICKS) MOV R0,R1 INC R1 ;ITICKS SPECIFIED? BEQ INVARG ;NO, ERROR MOV (R0),R0 ;GET ITICKS BGT 4$ ;OK MOV #-31.,R0 ;INVALID RTS PC ;RETURN ; 4$: MOV R0,ITICK ;NOTE TIC RATE CLR R2 ;CALCULATE CELL SIZE MOV IFIN,R3 ;FOR THIS ARRAY SUB ISTART,R3 ;AND AREA DIV SIZE,R2 ;... MOV R2,ICELL ;AND NOTE DIR$ #MRKT ;DO MRKT$ MOV $DSW,R0 ;NOTE RETURN CODE RTS PC ;AND RETURN .PAGE .SBTTL AST HANDLER ; ; THIS AST IS INITIALLY STARTED BY "TIMEIT" ; BVY ISSUING A MARK TIME FOR THE ; SPECIFIED TIME INTERVAL. ; IT EXAMINES THE PC STORED ON THE STACK BY ; THE RSX EXECUTIVE AND INCREMENTS THE ; APPROPRIATE CELL IN THE USER ARRAY. ; IT THEN FIRES UP ANOTHER MARK TIME WITH ; THE SAME AST ADDRESS AND INTERVAL ; AST: TST (SP)+ ;JUNK E.F. NUMBER MOV R0,-(SP) ;SAVE A REG MOV R1,-(SP) ;OR TWO CLR R0 ;SET UP FOR DIV INST MOV 6(SP),R1 ;GET PC CMP R1,ISTART ;IN RANGE? BLO MISS ;NO CMP R1,IFIN ;... BHIS MISS ;NO SUB ISTART,R1 ;GET OFFSET INTO RECORDING AREA DIV ICELL,R0 ;DIVIDE BY CELL SIZE ASL R0 ;CONVERT TO WORD OFFSET ADD IARRAY,R0 ;ADD IN ARRAY ADDRESS ADD #2,R0 ;ADJUST INC: INC (R0) ;BUMP COUNT MOV (SP)+,R1 MOV (SP)+,R0 DIR$ #MRKT ;SET NEXT AST UP ASTX$S ;EXIT MISS: MOV IARRAY,R0 ;ADDRESS OF MISS CELL BR INC ;GO INCREMENT .PAGE .SBTTL SHUTDOWN ROUTINE ; ; THIS ROUTINE SHUTS DOWN THE SAMPLING ; PROGRAM. IT SHOULD BE USED BEFORE PRINTING ; OUT THE RESULTS. ; TIMEST:: CMKT$C ,AST ;STOP RECORDING RTS PC ;RETURN TO CALLER .PAGE .SBTTL DATA AREAS IARRAY: .WORD SIZE: .WORD ISTART: .WORD IFIN: .WORD ICELL: .WORD MRKT: MRKT$ ,,1,AST ITICK= MRKT+M.KTMG .END