Bell 32V development
[unix-history] / usr / src / libnm / tan.s
CommitLineData
7049871b
TL
1# double tan(arg)
2# double arg;
3#method: range reduction to [0,pi/4] followed by polynomial
4# approximation: Hart&Cheney TAN 4285 D=19.74
5.globl _tan
6.text
7.align 1
8_tan:
9 .word 0x07c0
10 clrl r10 # sign flag, !=0 negate result
11 movd 4(ap),r0
12 jgeq c1
13 xorw2 $0x8000,r10
14 mnegd r0,r0
15c1:
16 emodd fopi,fopix,r0,r2,r6
17 bicl2 $~3,r2
18 caseb r2,$0,$3
19a0: .word a1-a0,a2-a0,a3-a0,a4-a0
20a2: subd3 r6,$0d1.0e+0,r6
21 jbr b1
22a3: xorw2 $0x8000,r10
23b1: bsbb rtan
24 jneq b2 # tests final result cmptd in rtan
25 movd $0d1.7e+38,r0
26 jbr b3
27b2: divd3 r0,$0d1.0e+0,r0
28b3: xorw2 r10,r0 # negate result if flag != 0
29 ret
30a4: subd3 r6,$0d1.0e+0,r6
31 xorw2 $0x8000,r10
32a1: bsbb rtan
33 xorw2 r10,r0
34 ret
35rtan:
36 muld3 r6,r6,r8
37 polyd r8,$4,pcoef
38 muld2 r0,r6
39 polyd r8,$3,qcoef
40 divd3 r0,r6,r0
41 rsb
42.data
43.align 3
44pcoef:
45 .double 0d0.33866386426771720960e-4
46 .double 0d0.34225543872410034353e-1
47 .double 0d-0.15506856534832663769e+2
48 .double 0d0.10559709017149531936e+4
49 .double 0d-0.13068202647548256682e+5
50qcoef:
51 .double 0d1.0e+0
52 .double 0d-0.15550331640317099669e+3
53 .double 0d0.47657513629164836989e+4
54 .double 0d-0.16638952389471190018e+5
55fopi:
56 .double 0d1.27323954473516268e+0
57fopix: .byte 0x29