.TITLE SINCOS .PSECT UTILS ; DCOS - CALCULATES THE COSINE OF ITS DOUBLE PRECISION ; ARGUMENT AND RETURNS THE DOUBLE PRECISION RESULT ; IN FLOATING POINT ACCUMULATOR, F3. ; ; DSIN - CALCULATES THE SINE OF ITS DOUBLE PRECISION ; ARGUMENT AND RETURNS THE DOUBLE PRECISION RESULT ; IN 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 FOR BOTH DCOS AND DSIN: ; JSR R5,DCOS (OR DSIN) ; 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. DCOS:: ;ENTRY POINT FOR DCOS FUNCTION. STFPS -(SP) ;SAVE EXISTING STATUS. LDFPS #5400 ;DISABLE UNDERFLOW TO ;ALLOW COS AT 90/270 SETD ;SET DOUBLE MODE. SUB #10,SP ;RESERVE FOUR WORDS TO STD F0,(SP) ;STORE F0. LDD @2(R5),F0 ADDD PI2$13,F0 BR SNC$13 DSIN:: ;ENTRY POINT FOR DSIN FUNCTION. STFPS -(SP) ;SAVE EXISTING STATUS. LDFPS #5400 ;DISABLE UNDERFLOW TO ;ALLOW SIN AT 180 SETD ;SET DOUBLE MODE. SUB #10,SP ;RESERVE FOUR WORDS TO STD F0,(SP) ;STORE F0. LDD @2(R5),F0 SNC$13: MOV R0,-(SP) ;SAVE REGISTERS. MOV R1,-(SP) ; MOV R2,-(SP) ; SUB #10,SP ;RESERVE FOUR WORDS TO STD F1,(SP) ;STORE F1. SUB #10,SP ;RESERVE FOUR WORDS TO STD F2,(SP) ;STORE F2. SETI ;SET INTEGER MODE. MOV #FCO$13,R0 CLR R2 CFCC BGE POS$13 INC R2 ABSD F0 POS$13: DIVD (R0)+,F0 MODD #1.0,F0 CFCC BEQ RTN$13 MODD #4.0,F0 STCDI F1,R1 ROR R1 BCC Q13$13 NEGD F0 ADDD #1.0,F0 Q13$13: ROR R1 BCC Q12$13 NEGD F0 Q12$13: LDD F0,F2 MULD F2,F2 MOV #8.,R1 LDD (R0)+,F1 XPD$13: MULD F2,F1 DEC R1 ADDD (R0)+,F1 BGT XPD$13 MULD F1,F0 TST R2 BEQ RTN$13 NEGD F0 RTN$13: STD F0,F3 ;RESULT IS IN F3. LDD (SP)+,F2 ;RESTORE F2. LDD (SP)+,F1 ;RESTORE F1. MOV (SP)+,R2 ;RESTORE R4. MOV (SP)+,R1 ;RESTORE R1. MOV (SP)+,R0 ;RESTORE R0. LDD (SP)+,F0 ;RESTORE F0. LDFPS (SP)+ ;RESTORE STATUS. RTS R5 PI2$13: .WORD 040311,007732 .WORD 121041,064302 FCO$13: .WORD 040711,007732 .WORD 121041,064302 .WORD 026716,106703 .WORD 045277,146362 .WORD 130467,136273 .WORD 103054,123153 .WORD 032164,074657 .WORD 047254,154742 .WORD 133561,101646 .WORD 167216,134016 .WORD 035050,036032 .WORD 041214,103131 .WORD 136231,064546 .WORD 071423,125024 .WORD 037243,032743 .WORD 035655,051557 .WORD 140045,056747 .WORD 030455,171222 CON$13: .WORD 040311,007732 .WORD 121041,064302 .END