|
|
1.1 root 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: bispsw $0xe0
15: muld3 4(ap),loge10,r0
16: jbr argtst
17: .align 1
18: _exp:
19: .word 0x07c0
20: bispsw $0xe0
21: movd 4(ap),r0
22: argtst:
23: jnequ smlarg
24: movd $0d1.0e+0,r0
25: ret
26: smlarg:
27: cmpd r0,minarg
28: jgeq lrgarg
29: mnegd huge,r0
30: ret
31: lrgarg:
32: cmpd r0,maxarg
33: jleq range
34: movl $ERANGE,_errno
35: movd huge,r0
36: ret
37: range:
38: emodd log2e,log2ex,r0,r10,r6 # r10=int(arg), r6=frac(arg)
39: tstd r0
40: jgtr l1
41: addd2 $0d0.5e+0,r6
42: subw2 $1,r10
43: jbr l2
44: l1: subd2 $0d0.5e+0,r6
45: l2: # Hart&Cheney EXPB 1067
46: muld3 r6,r6,r8 # range [-.5,.5] D=18.1
47: polyd r8,$2,pcoef
48: muld2 r0,r6
49: polyd r8,$2,qcoef
50: subd3 r6,r0,r2
51: addd2 r6,r0
52: divd2 r2,r0
53: muld2 sqrt2,r0
54: extzv $7,$8,r0,r2
55: addl2 r2,r10
56: insv r10,$7,$8,r0 # load correct exponent
57: ret
58: .data
59: .align 2
60: pcoef:
61: .double 0d0.23093347753750233624e-1
62: .double 0d0.20202065651286927227886e+2
63: .double 0d0.15139067990543389159e+4
64: qcoef:
65: .double 0d0.1e+1
66: .double 0d0.23318421142748162379e+3
67: .double 0d0.43682116627275584985e+4
68: minarg:
69: .double 0d-88.028e+0
70: maxarg:
71: .double 0d88.028e+0
72: huge: .double 0d1.7e+38
73: loge10:
74: .double 0d2.30258509299404568401e+0
75: sqrt2:
76: .double 0d1.41421356237309504880e+0
77: log2e:
78: .double 0d1.44269504088896340735e+0
79: log2ex:
80: .byte 0xbb
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.