Bell 32V development
[unix-history] / usr / src / libnm / sinh.s
# double _sinh(arg)
# double _cosh(arg)
# double arg
# method: compute from exp except for sinh where -.5<arg<.5
# then a polynimial approx. is uded
# JF Jarvis, August 12,1978
.globl _sinh
.globl _cosh
.globl _exp
.text
.align 1
_sinh:
.word 0x0c0
movd 4(ap),r6
cmpd r6,$0d0.5e+0
jgeq expfrm
cmpd r6,$0d-0.5e+0
jleq expfrm
muld3 r6,r6,r0 # Hart&Cheney SINH 1985
polyd r0,$5,pcoef
muld2 r6,r0
ret
expfrm:
movd r6,-(sp) # sinh(x)=(exp(x)-exp(-x))/2
calls $2,_exp
divd3 r0,$0d1.0e+0,r2
subd2 r2,r0
muld2 $0d0.5e+0,r0
ret
.align 1
_cosh:
.word 0x0
movd 4(ap),-(sp)
calls $2,_exp
divd3 r0,$0d1.0e+0,r2
addd2 r2,r0
muld2 $0d0.5e+0,r0
ret
.data
.align 3
pcoef:
.double 0d0.251726188251e-7
.double 0d0.275569807356154e-5
.double 0d0.1984127027907999e-3
.double 0d0.833333333307759961e-2
.double 0d0.16666666666667212324e+0
.double 0d0.99999999999999998116e+0