; PRIM2 - IA benchmark program - FLOATING POINT VERSION VMAJOR = 1. VMINOR = 4. VSUB = 0. VEDIT = 2. VWHO = 0. SEARCH SYS SEARCH SYSSYM SEARCH TRM DEFINE CRT COL,ROW,SAVE IF NB,SAVE,PUSH D1 MOVW #COL*256.+ROW,D1 TCRT IF NB,SAVE,POP D1 ENDM DSECT .=0 STRTIM: BLKL 1 STRCPU: BLKL 1 ENDTIM: BLKL 1 ENDCPU: BLKL 1 COL: BLKW 1 N: BLKW 3 K: BLKW 3 M: BLKW 3 L: BLKW 3 ONE: BLKW 3 WRK: BLKW 3 IMPSIZ = . PSECT .=0 PRIM2: PHDR -2,-1,PH$REE!PH$REU GETIMP IMPSIZ,A5 ; get memory CRT 255.,0. ; clear screen/put up header TYPE TYPECR CRLF CLRW COL(A5) GTIMEI STRTIM(A5) ; save start time JOBIDX A0 MOV JOBCPU(A0),STRCPU(A5) CLEAR N(A5),6 ; Init Variables CLEAR K(A5),6 CLEAR M(A5),6 CLEAR L(A5),6 MOV #1,D1 FLTOF D1,ONE(A5) ; for N = 1 to 1000 B140: LEA A0,ONE(A5) LEA A1,N(A5) FADD A0,A1 MOV ONE(A5),K(A5) MOVW ONE+4(A5),K+4(A5) CTRLC ABEND ; ^C test ; for K = 2 to 500 B150: LEA A0,ONE(A5) LEA A1,K(A5) FADD A0,A1 ; let M = N/K B160: MOV N(A5),M(A5) MOVW N+4(A5),M+4(A5) LEA A0,K(A5) LEA A1,M(A5) FDIV A0,A1 ; let L = INT(M) B170: FFTOL M(A5),WRK(A5) FLTOF WRK(A5),L(A5) ; if L = 0 then 230 B180: TSTW L(A5) BEQ B230 ; if L = 1 then 220 B190: LEA A0,L(A5) LEA A1,ONE(A5) FCMP A0,A1 BEQ B220 ; if M > L then 220 B200: LEA A0,M(A5) LEA A1,L(A5) FCMP A0,A1 BHI B220 ; if M = L then 240 B210: LEA A0,M(A5) LEA A1,L(A5) FCMP A0,A1 BEQ B240 ; next K B220: MOV #500.,D1 FLTOF D1,WRK(A5) LEA A0,K(A5) LEA A1,WRK(A5) FCMP A0,A1 JLO B150 ; print N; B230: FFTOL N(A5),D1 DCVT 0,2 ADDW #8.,COL(A5) CMPW COL(A5),#72. BHI 1$ TAB BR B240 1$: CRLF CLRW COL(A5) ; next N B240: MOV #1000.,D1 FLTOF D1,WRK(A5) LEA A0,N(A5) LEA A1,WRK(A5) FCMP A0,A1 JLO B140 ; DONE... JOBIDX A0 ; get end time MOV JOBCPU(A0),ENDCPU(A5) GTIMEI ENDTIM(A5) CRLF ; in case HC terminal CRLF CRT 23.,1. TYPESP MOV ENDCPU(A5),D1 SUB STRCPU(A5),D1 DIV D1,#778. ; convert jiffys to seconds MOV D1,D0 SWAP D0 AND #177777,D0 ; remainder in D0 MUL D0,#100. ; x 100 DIV D0,#778. ; / 778 AND #177777,D0 ; houndredths in D0 AND #177777,D1 ; seconds in D1 MOV D1,D2 ; (saved in D2) DCVT 0,2 TYPE <.> MOV D0,D1 DCVT 2,2 TYPESP < CPU seconds,> MOV ENDTIM(A5),D1 SUB STRTIM(A5),D1 CMP D2,D1 BLO 1$ INC D1 1$: DCVT 0,2 TYPECR < seconds elapsed.> EXIT ABEND: CRLF TYPECR EXIT EVEN END