.TITLE JDIV .IDENT /V1.01/ .PSECT CODE,RO .NLIST SYM,TOC ; DOUBLE-PRECISION INTEGER DIVISION ; ; 'PROCEDURE' JDIV(JQUOT,JA,JB); ; ; JQUOT:=JA/JB F0=%0 F1=%1 G1576:: STFPS %5 ; SAVE CURRENT FPU STATUS LDFPS #^B0100000011100000 ; INTERRUPTS OFF, DP & LONG MODES ON LDCLD @%2,F0 ; GET JA AS D.P. FLOATING LDCLD @%3,F1 ; AND JB CFCC ; TEST FOR DIVIDE BY 0 BEQ 11$ ; BRANCH IF DIVISOR=0 DIVF F1,F0 ; QUOTIENT TO F0 STCDL F0,@%1 ; SAVE RESULT CFCC ; COPY FPU FLAGS TO CPU FLAGS BCC 100$ ; EXIT IF OK 11$: CLR (%1)+ ; IF OVERFLOW, RETURN 0 CLR @%1 DEC V ; DEC OVERFLOW COUNTER MOV #788.,FLOERR ; SET UP FLOERRORCODE 100$: LDFPS %5 ; RESET FPU STATUS ADD #2,@SP ; STANDARD EXIT RTS PC .PSECT GLOBAL,OVR,GBL,RW G=. V=G+300. FLOERR=G+302. .END