Commit | Line | Data |
---|---|---|
11f0f1d9 TL |
1 | # double exp(arg) |
2 | # double arg; 0<= arg< 88 | |
3 | # double exp10(arg) | |
4 | # method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067 | |
5 | # J F Jarvis, August 5, 1978 | |
6 | .set ERANGE,34 | |
7 | .globl _exp | |
8 | .globl _exp10 | |
9 | .globl _errno | |
10 | .text | |
11 | .align 1 | |
12 | _exp10: | |
13 | .word 0x07c0 | |
14 | muld3 4(ap),loge10,r0 | |
15 | jbr argtst | |
16 | .align 1 | |
17 | _exp: | |
18 | .word 0x07c0 | |
19 | movd 4(ap),r0 | |
20 | argtst: | |
21 | jnequ smlarg | |
22 | movd $0d1.0e+0,r0 | |
23 | ret | |
24 | smlarg: | |
25 | cmpd r0,minarg | |
26 | jgeq lrgarg | |
27 | mnegd huge,r0 | |
28 | ret | |
29 | lrgarg: | |
30 | cmpd r0,maxarg | |
31 | jleq range | |
32 | movl $ERANGE,_errno | |
33 | movd $huge,r0 | |
34 | ret | |
35 | range: | |
36 | emodd log2e,log2ex,r0,r10,r6 # r10=int(arg), r6=frac(arg) | |
37 | tstd r0 | |
38 | jgtr l1 | |
39 | addd2 $0d0.5e+0,r6 | |
40 | subw2 $1,r10 | |
41 | jbr l2 | |
42 | l1: subd2 $0d0.5e+0,r6 | |
43 | l2: # Hart&Cheney EXPB 1067 | |
44 | muld3 r6,r6,r8 # range [-.5,.5] D=18.1 | |
45 | polyd r8,$2,pcoef | |
46 | muld2 r0,r6 | |
47 | polyd r8,$2,qcoef | |
48 | subd3 r6,r0,r2 | |
49 | addd2 r6,r0 | |
50 | divd2 r2,r0 | |
51 | muld2 sqrt2,r0 | |
52 | extzv $7,$8,r0,r2 | |
53 | addl2 r2,r10 | |
54 | insv r10,$7,$8,r0 # load correct exponent | |
55 | ret | |
56 | .data | |
57 | .align 3 | |
58 | pcoef: | |
59 | .double 0d0.23093347753750233624e-1 | |
60 | .double 0d0.20202065651286927227886e+2 | |
61 | .double 0d0.15139067990543389159e+4 | |
62 | qcoef: | |
63 | .double 0d0.1e+1 | |
64 | .double 0d0.23318421142748162379e+3 | |
65 | .double 0d0.43682116627275584985e+4 | |
66 | minarg: | |
67 | .double 0d-88.028e+0 | |
68 | maxarg: | |
69 | .double 0d88.028e+0 | |
70 | huge: .double 0d1.7e+38 | |
71 | loge10: | |
72 | .double 0d2.30258509299404568401e+0 | |
73 | sqrt2: | |
74 | .double 0d1.41421356237309504880e+0 | |
75 | log2e: | |
76 | .double 0d1.44269504088896340735e+0 | |
77 | log2ex: | |
78 | .byte 0xbb |