can't reset it if not set up
[unix-history] / usr / src / old / libm / liboldnm / log.s
CommitLineData
8daa8d7c
DF
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) %G%
7#
8#
65ebf766
DF
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
37range:
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
44comp:
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
60pcoef:
61 .double 0d-0.24550691103445385056e+2
62 .double 0d0.23616053565907671809e+3
63 .double 0d-0.54904361859132995001e+3
64 .double 0d0.35621151669903912407e+3
65qcoef:
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
71log10e:
72 .double 0d0.43429448190325182765e+0
73sqrt2d2:
74 .double 0d0.70710678118654752440e+0
75log2:
76 .double 0d0.69314718055994530941e+0