Bell 32V development
[unix-history] / usr / src / libnm / asin.s
CommitLineData
babb2635
TL
1#double asin(arg)
2#double arg; -1.0<=arg<=1.0 or an out of range error return
3#method: call atan() after range reduction
4# calls: satan (internal entry point of atan.s), _sqrt
5# J F Jarvis August 8, 1078
6.globl _asin
7.globl _errno
8.globl _sqrt
9.globl satan
10.set EDOM,33
11.text
12.align 1
13_asin:
14 .word 0x0c0
15 movd 4(ap),r6
16 jgtr a1
17 mnegd r6,r6
18a1: cmpd r6,$0d1.0e+0
19 jleq a2
20 movl $EDOM,_errno
21 clrd r0
22 ret
23#
24a2: muld3 r6,r6,r0
25 subd3 r0,$0d1.0e+0,-(sp)
26 calls $2,_sqrt
27 cmpd r6,$0d0.6875
28 jleq a3
29 divd2 r6,r0
30 jsb satan
31 subd3 r0,pio2,r0
32 jbr a4
33a3: divd3 r0,r6,r0
34 jsb satan
35a4: tstd 4(ap)
36 jleq a5
37 ret
38a5: mnegd r0,r0
39 ret
40.data
41.align 3
42pio2: .double 0d1.57079632679489661923e+0