      TITLE F_DSIN
      MODULE F_DSIN
      EXPORTC F_DSIN,F_DCOS
      IMPORTC F_ZSTE,F_HANDLER
      AREADEF PROG,[PIC,READ,SHARED,CODE],DOUBLE
      AREADEF DATA,[WRITE,DATA],DOUBLE
      DEFSB   DATA
      AREA    PROG
      DCS     'DSINCOS     '
F_DSIN SPRD    FP,TOS
      LPRD    FP,12(SP)
      CMPQW   0,6(0(FP))
      SGTD    R0
      ADDD    R0,R0
      BR      st
F_DCOS SPRD    FP,TOS
      LPRD    FP,12(SP)
      MOVQD   1,R0
st    ABSL    0(0(FP)),F0
      MULL    =0.63661977236758134,F0
      CMPL    F0,=2.E9
      BGT     bad
      ROUNDLD F0,R1
      MOVDL   R1,F2
      SUBL    F2,F0
      ADDL    F0,F0
      ADDD    R1,R0
      ANDB    =3,R0
      MOVL    F0,F2
      MULL    F2,F2
      TBITB   =0,R0
      BFC     c2
      MOVL    =1.1363812697E-10,F0
      MULL    F2,F0
      SUBL    =2.460945716614E-08,F0
      MULL    F2,F0
      ADDL    =3.5908591233603597E-06,F0
      MULL    F2,F0
      SUBL    =3.2599188645404005E-04,F0
      MULL    F2,F0
      ADDL    =1.5854344243734566E-02,F0
      MULL    F2,F0
      SUBL    =3.0842513753403722E-01,F0
      MULL    F2,F0
      ADDL    =9.9999999999999991E-01,F0
      BR      c3
c2    MOVL    =6.877100349E-12,F4
      MULL    F2,F4
      SUBL    =1.757149292755E-09,F4
      MULL    F2,F4
      ADDL    =3.13361621661904E-07,F4
      MULL    F2,F4
      SUBL    =3.6576204158455692E-05,F4
      MULL    F2,F4
      ADDL    =2.490394570188736E-03,F4
      MULL    F2,F4
      SUBL    =8.0745512188280539E-02,F4
      MULL    F2,F4
      ADDL    =7.8539816339744828E-01,F4
      MULL    F4,F0
c3    CMPQB   1,R0
      BGE     c4
      NEGL    F0,F0
c4    MOVL    F0,ans
      ADDR    ans,R0
      LPRD    FP,TOS
      RXP     4
bad   ADDR    mess,TOS
      CXP     F_ZSTE
      HANDLER
      CXP     F_HANDLER
txt   DCS     'argument is too big for DSIN/COS'
lgt   EQU     *
      AREA    DATA
ans   ALLOCD  2
mess  ADDRESS mm
mm    ADDRESS txt
      DCD     lgt-txt
      END
