|
|
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: bispsw $0xe0
16: movd 4(ap),-(sp)
17: calls $2,_log
18: muld2 log10e,r0
19: ret
20: .align 1
21: _log:
22: .word 0x07c0
23: bispsw $0xe0
24: movd 4(ap),r0
25: jgtr range
26: movl $EDOM,_errno
27: movd $0d-1.7e+38,r0 # machine dept max neg
28: ret
29: range:
30: extzv $7,$8,r0,r10 # r10 = exp(arg)+128
31: insv $128,$7,$8,r0 # r0,r1: 0.5<=frac(arg)<1.0
32: cmpd r0,sqrt2d2
33: jgeq comp
34: insv $129,$7,$8,r0 # frac *= 2
35: decl r10 # exp -= 1
36: comp:
37: subl2 $128,r10 # signed exp for scaled arg
38: subd3 $0d1.0e+0,r0,r6 # Hart&cheney LOGE 2706
39: addd2 $0d1.0e+0,r0
40: divd2 r0,r6 # r6,r7= (frac-1)/(frac+1)
41: muld3 r6,r6,r8
42: polyd r8,$3,pcoef
43: muld2 r0,r6
44: polyd r8,$4,qcoef
45: divd3 r0,r6,r0
46: cvtld r10,r2
47: muld2 log2,r2 # r2,r3= loge(2**exp)
48: addd2 r2,r0
49: ret
50: .data
51: .align 2
52: pcoef:
53: .double 0d-0.24550691103445385056e+2
54: .double 0d0.23616053565907671809e+3
55: .double 0d-0.54904361859132995001e+3
56: .double 0d0.35621151669903912407e+3
57: qcoef:
58: .double 0d0.10e+1
59: .double 0d-0.35526251110400238735e+2
60: .double 0d0.19375591463035879517e+3
61: .double 0d-0.33389039541217149928e+3
62: .double 0d0.17810575834951956204e+3
63: log10e:
64: .double 0d0.43429448190325182765e+0
65: sqrt2d2:
66: .double 0d0.70710678118654752440e+0
67: log2:
68: .double 0d0.69314718055994530941e+0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.