xref: /csrg-svn/old/libm/liboldnm/log.s (revision 20008)
1*20008Sdist#
2*20008Sdist# Copyright (c) 1980 Regents of the University of California.
3*20008Sdist# All rights reserved.  The Berkeley software License Agreement
4*20008Sdist# specifies the terms and conditions for redistribution.
5*20008Sdist#
6*20008Sdist#	@(#)log.s	5.1 (Berkeley) 05/08/85
7*20008Sdist#
8*20008Sdist#
919997Sdist# double log(arg) ; natural logarithm
1019997Sdist# double log10(arg); base 10 log
1119997Sdist# double arg
1219997Sdist# if(arg<=0){ errno=EDOM; return(-1.7e+38); }
1319997Sdist# nat. log computed from Hart&Cheney LOGE 2706 D=22.1
1419997Sdist# J F Jarvis August 3, 1978
1519997Sdist.set	EDOM,33
1619997Sdist.globl	_log
1719997Sdist.globl	_log10
1819997Sdist.globl	_errno
1919997Sdist.text
2019997Sdist.align	1
2119997Sdist_log10:
2219997Sdist	.word	0x0
2319997Sdist	bispsw	$0xe0
2419997Sdist	movd	4(ap),-(sp)
2519997Sdist	calls	$2,_log
2619997Sdist	muld2	log10e,r0
2719997Sdist	ret
2819997Sdist.align	1
2919997Sdist_log:
3019997Sdist	.word	0x07c0
3119997Sdist	bispsw	$0xe0
3219997Sdist	movd	4(ap),r0
3319997Sdist	jgtr	range
3419997Sdist	movl	$EDOM,_errno
3519997Sdist	movd	$0d-1.7e+38,r0	# machine dept max neg
3619997Sdist	ret
3719997Sdistrange:
3819997Sdist	extzv	$7,$8,r0,r10	# r10 = exp(arg)+128
3919997Sdist	insv	$128,$7,$8,r0	# r0,r1: 0.5<=frac(arg)<1.0
4019997Sdist	cmpd	r0,sqrt2d2
4119997Sdist	jgeq	comp
4219997Sdist	insv	$129,$7,$8,r0	# frac *= 2
4319997Sdist	decl	r10				# exp -= 1
4419997Sdistcomp:
4519997Sdist	subl2	$128,r10	# signed exp for scaled arg
4619997Sdist	subd3	$0d1.0e+0,r0,r6	# Hart&cheney LOGE 2706
4719997Sdist	addd2	$0d1.0e+0,r0
4819997Sdist	divd2	r0,r6	# r6,r7= (frac-1)/(frac+1)
4919997Sdist	muld3	r6,r6,r8
5019997Sdist	polyd	r8,$3,pcoef
5119997Sdist	muld2	r0,r6
5219997Sdist	polyd	r8,$4,qcoef
5319997Sdist	divd3	r0,r6,r0
5419997Sdist	cvtld	r10,r2
5519997Sdist	muld2	log2,r2	# r2,r3= loge(2**exp)
5619997Sdist	addd2	r2,r0
5719997Sdist	ret
5819997Sdist.data
5919997Sdist.align	2
6019997Sdistpcoef:
6119997Sdist	.double	0d-0.24550691103445385056e+2
6219997Sdist	.double	0d0.23616053565907671809e+3
6319997Sdist	.double	0d-0.54904361859132995001e+3
6419997Sdist	.double	0d0.35621151669903912407e+3
6519997Sdistqcoef:
6619997Sdist	.double	0d0.10e+1
6719997Sdist	.double	0d-0.35526251110400238735e+2
6819997Sdist	.double	0d0.19375591463035879517e+3
6919997Sdist	.double	0d-0.33389039541217149928e+3
7019997Sdist	.double 0d0.17810575834951956204e+3
7119997Sdistlog10e:
7219997Sdist	.double	0d0.43429448190325182765e+0
7319997Sdistsqrt2d2:
7419997Sdist	.double	0d0.70710678118654752440e+0
7519997Sdistlog2:
7619997Sdist	.double	0d0.69314718055994530941e+0
77