|
|
1.1 root 1: # double log(arg) ; natural logarithm
2: # double log10(arg); base 10 log
3: # double arg
4: # if(arg<=0){ errno=EDOM; return(-1.7e+38); }
5: # nat. log computed from Hart&Cheney LOGE 2706 D=22.1
6: # J F Jarvis August 3, 1978
7: .set EDOM,33
8: .globl _log
9: .globl _log10
10: .globl _errno
11: .text
12: .align 1
13: _log10:
14: .word 0x0
15: movd 4(ap),-(sp)
16: calls $2,_log
17: muld2 log10e,r0
18: ret
19: .align 1
20: _log:
21: .word 0x07c0
22: movd 4(ap),r0
23: jgtr range
24: movl $EDOM,_errno
25: movd $0d-1.7e+38,r0 # machine dept max neg
26: ret
27: range:
28: extzv $7,$8,r0,r10 # r10 = exp(arg)+128
29: insv $128,$7,$8,r0 # r0,r1: 0.5<=frac(arg)<1.0
30: cmpd r0,sqrt2d2
31: jgeq comp
32: insv $129,$7,$8,r0 # frac *= 2
33: decl r10 # exp -= 1
34: comp:
35: subl2 $128,r10 # signed exp for scaled arg
36: subd3 $0d1.0e+0,r0,r6 # Hart&cheney LOGE 2706
37: addd2 $0d1.0e+0,r0
38: divd2 r0,r6 # r6,r7= (frac-1)/(frac+1)
39: muld3 r6,r6,r8
40: polyd r8,$3,pcoef
41: muld2 r0,r6
42: polyd r8,$4,qcoef
43: divd3 r0,r6,r0
44: cvtld r10,r2
45: muld2 log2,r2 # r2,r3= loge(2**exp)
46: addd2 r2,r0
47: ret
48: .data
49: .align 2
50: pcoef:
51: .double 0d-0.24550691103445385056e+2
52: .double 0d0.23616053565907671809e+3
53: .double 0d-0.54904361859132995001e+3
54: .double 0d0.35621151669903912407e+3
55: qcoef:
56: .double 0d0.10e+1
57: .double 0d-0.35526251110400238735e+2
58: .double 0d0.19375591463035879517e+3
59: .double 0d-0.33389039541217149928e+3
60: .double 0d0.17810575834951956204e+3
61: log10e:
62: .double 0d0.43429448190325182765e+0
63: sqrt2d2:
64: .double 0d0.70710678118654752440e+0
65: log2:
66: .double 0d0.69314718055994530941e+0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.