BSD 4 development
[unix-history] / usr / src / lib / libnm / sin.s
# double float sin(),cos()
#coefficients are from Hart & Cheney SIN3370 (18.80D)
.text
.align 1
.globl _sin
.globl _cos
_sin:
.word 0x03c0
clrl r9
movd 4(ap),r0
jgeq range
movl $2,r9
jbr negarg
.align 1
_cos:
.word 0x0fc0
movl $1,r9
movd 4(ap),r0
jgeq range
negarg:
mnegd r0,r0
range:
emodd twoopi,twoopix,r0,r8,r6
addl2 r9,r8
bicb2 $~03,r8
caseb r8,$0,$3
bse: .word qda-bse,qdb-bse,qdc-bse,qdd-bse
qdb: subd3 r6,$0d1.0e+0,r6
jbr qda
qdc: mnegd r6,r6
jbr qda
qdd: subd2 $0d1.0e+0,r6
qda:
muld3 r6,r6,r8
polyd r8,$4,pcoef
muld2 r0,r6
polyd r8,$4,qcoef
divd3 r0,r6,r0
ret
.data
.align 2
twoopi:.double 0d6.36619772367581340000e-01
qcoef:.double 0d1.00000000000000000000e+00
.double 0d1.32653490878613630000e+02
.double 0d9.46309610153820810000e+03
.double 0d4.08179225234329970000e+05
.double 0d8.64455865292253430000e+06
pcoef:.double 0d1.45968840666576870000e+02
.double 0d-1.38472724998245280000e+04
.double 0d4.40103053537526640000e+05
.double 0d-4.94290810090284410000e+06
.double 0d1.35788409787737560000e+07
twoopix: .byte 0x29