.TITLE DATAN .PSECT UTILS ; DATAN - CALCULATES THE ARCTANGENT OF ITS DOUBLE PRECISION ; ARGUMENT AND RETURNS THE DOUBLE PRECISION RESULT ; IN FLOATING POINT ACCUMULATOR, F3. ; ; NOTE! FLOATING POINT ACCUMULATOR F3 IS USED TO CARRY ; THE RESULT, AND ITS INCOMING VALUE IS NOT SAVED. ; IT IS THE RESPONSIBILITY OF THE CALLER TO SAVE ; AND RESTORE F3, IF THE CALLER REQUIRES F3 TO ; BE MAINTAINED INTACT. ; ; CALL: ; JSR R5,DATAN ; RETURN ; ADDRS OF VALUE ON WHICH FUNCTION ; IS TO BE PERFORMED. ; FLOATING POINT ACCUMULATOR SYMBOL DEFINITIONS: ;....................................................... F0 = %0 ;FLOATING POINT ACCUMULATOR 0. F1 = %1 ; " " " 1. F2 = %2 ; " " " 2. F3 = %3 ; " " " 3. F4 = %4 ; " " " 4. F5 = %5 ; " " " 5. F6 = %6 ; " " " 6. F7 = %7 ; " " " 7. DATAN:: ;ENTRY POINT FOR DATAN FINCTION. STFPS -(SP) ;SAVE EXISTING STATUS. SETD ;SET DOUBLE MODE. MOV R0,-(SP) ;SAVE R0... MOV R1,-(SP) ;...R1... MOV R4,-(SP) ;...AND R4. SUB #10,SP ;RESERVE FOUR WORDS TO STD F0,(SP) ;SAVE F0. SUB #10,SP ;...AND... STD F1,(SP) ;...F1... SUB #10,SP ;...AND... STD F2,(SP) ;...F2... LDD F4,F3 ;RDY TO SAVE F4. SUB #10,SP ;...SAVE... STD F3,(SP) ;...F4. LDD F5,F3 ;RDY TO SAVE F5. SUB #10,SP ;...SAVE... STD F3,(SP) ;...F5. CLRD F3 LDD @2(R5),F0 CLR R4 CFCC STD F3,F5 CLRD F3 BGE 5$ ABSD F0 INC R4 5$: LDD #1.0,F1 CMPD F0,F1 CFCC BLE 10$ DEC R4 DIVD F0,F1 LDD F1,F0 LDD PI2$15,F3 10$: STD F3,F4 CLRD F3 CMPD T15$15,F0 CFCC BGE 15$ LDD PI6$15,F3 LDD F0,F1 MULD RT3$15,F0 SUBD #1.0,F0 ADDD RT3$15,F1 DIVD F1,F0 15$: LDD F0,F2 MULD F0,F0 MOV #FCO$15,R0 LDD (R0)+,F1 MOV #8.,R1 20$: MULD F0,F1 ADDD (R0)+,F1 SOB R1,20$ MULD F2,F1 ADDD F3,F1 SUBD F4,F1 TST R4 BEQ 25$ NEGD F1 25$: ADDD F5,F1 STD F1,F3 ;RESULT IS IN F3. LDD (SP)+,F0 ;RESTORE... STD F0,F5 ;...F5... LDD (SP)+,F0 ;...AND... STD F0,F4 ;...F4... LDD (SP)+,F2 ;...F2... LDD (SP)+,F1 ;...F1... LDD (SP)+,F0 ;...F0... MOV (SP)+,R4 ;...R4... MOV (SP)+,R1 ;...R1... MOV (SP)+,R0 ;...AND R0. LDFPS (SP)+ ;RESTORE STATUS. RTS R5 ;RETURN TO CALLER. PI2$15: .WORD 040311,007732 .WORD 121041,064301 T15$15: .WORD 037611,030242 .WORD 172366,065261 PI6$15: .WORD 040006,005221 .WORD 140553,115454 RT3$15: .WORD 040335,131727 .WORD 041302,062524 FCO$15: .WORD 037065,150707 .WORD 162300,163030 .WORD 137204,143233 .WORD 004010,000413 .WORD 037235,043002 .WORD 027154,142446 .WORD 137272,025671 .WORD 116412,065630 .WORD 037343,107047 .WORD 023625,025401 .WORD 137422,044444 .WORD 071335,116151 .WORD 037514,146314 .WORD 146224,165650 .WORD 137652,125252 .WORD 125252,113602 .WORD 040200,000000 .WORD 000000,000000 .END