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