| 1 | # double float sin(),cos() |
| 2 | #coefficients are from Hart & Cheney SIN3370 (18.80D) |
| 3 | .text |
| 4 | .align 1 |
| 5 | .globl _sin |
| 6 | .globl _cos |
| 7 | _sin: |
| 8 | .word 0x03c0 |
| 9 | clrl r9 |
| 10 | movd 4(ap),r0 |
| 11 | jgeq range |
| 12 | movl $2,r9 |
| 13 | jbr negarg |
| 14 | |
| 15 | .align 1 |
| 16 | _cos: |
| 17 | .word 0x0fc0 |
| 18 | movl $1,r9 |
| 19 | movd 4(ap),r0 |
| 20 | jgeq range |
| 21 | negarg: |
| 22 | mnegd r0,r0 |
| 23 | |
| 24 | range: |
| 25 | emodd twoopi,twoopix,r0,r8,r6 |
| 26 | addl2 r9,r8 |
| 27 | bicb2 $~03,r8 |
| 28 | caseb r8,$0,$3 |
| 29 | bse: .word qda-bse,qdb-bse,qdc-bse,qdd-bse |
| 30 | qdb: subd3 r6,$0d1.0e+0,r6 |
| 31 | jbr qda |
| 32 | qdc: mnegd r6,r6 |
| 33 | jbr qda |
| 34 | qdd: subd2 $0d1.0e+0,r6 |
| 35 | qda: |
| 36 | muld3 r6,r6,r8 |
| 37 | polyd r8,$4,pcoef |
| 38 | muld2 r0,r6 |
| 39 | polyd r8,$4,qcoef |
| 40 | divd3 r0,r6,r0 |
| 41 | ret |
| 42 | .data |
| 43 | .align 3 |
| 44 | twoopi:.double 0d6.36619772367581340000e-01 |
| 45 | qcoef:.double 0d1.00000000000000000000e+00 |
| 46 | .double 0d1.32653490878613630000e+02 |
| 47 | .double 0d9.46309610153820810000e+03 |
| 48 | .double 0d4.08179225234329970000e+05 |
| 49 | .double 0d8.64455865292253430000e+06 |
| 50 | pcoef:.double 0d1.45968840666576870000e+02 |
| 51 | .double 0d-1.38472724998245280000e+04 |
| 52 | .double 0d4.40103053537526640000e+05 |
| 53 | .double 0d-4.94290810090284410000e+06 |
| 54 | .double 0d1.35788409787737560000e+07 |
| 55 | twoopix: .byte 0x29 |