xref: /original-bsd/old/libm/liboldnm/log.s (revision 2bb802fc)
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) 05/08/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
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
77