xref: /original-bsd/old/libm/liboldnm/exp.s (revision 6fcea464)
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#	@(#)exp.s	5.1 (Berkeley) 05/08/85
7#
8#
9# double exp(arg)
10# double arg; 0<= arg< 88
11# double exp10(arg)
12# method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067
13# J F Jarvis, August 5, 1978
14.set	ERANGE,34
15.globl	_exp
16.globl	_exp10
17.globl	_errno
18.text
19.align	1
20_exp10:
21	.word	0x07c0
22	bispsw	$0xe0
23	muld3	4(ap),loge10,r0
24	jbr	argtst
25.align	1
26_exp:
27	.word	0x07c0
28	bispsw	$0xe0
29	movd	4(ap),r0
30argtst:
31	jnequ	smlarg
32	movd	$0d1.0e+0,r0
33	ret
34smlarg:
35	cmpd	r0,minarg
36	jgeq	lrgarg
37	mnegd	huge,r0
38	ret
39lrgarg:
40	cmpd	r0,maxarg
41	jleq	range
42	movl	$ERANGE,_errno
43	movd	huge,r0
44	ret
45range:
46	emodd	log2e,log2ex,r0,r10,r6	# r10=int(arg), r6=frac(arg)
47	tstd	r0
48	jgtr	l1
49	addd2	$0d0.5e+0,r6
50	subw2	$1,r10
51	jbr	l2
52l1:	subd2	$0d0.5e+0,r6
53l2:			# Hart&Cheney EXPB 1067
54	muld3	r6,r6,r8	# range [-.5,.5] D=18.1
55	polyd	r8,$2,pcoef
56	muld2	r0,r6
57	polyd	r8,$2,qcoef
58	subd3	r6,r0,r2
59	addd2	r6,r0
60	divd2	r2,r0
61	muld2	sqrt2,r0
62	extzv $7,$8,r0,r2
63	addl2	r2,r10
64	insv	r10,$7,$8,r0	# load correct exponent
65	ret
66.data
67.align	2
68pcoef:
69	.double	0d0.23093347753750233624e-1
70	.double	0d0.20202065651286927227886e+2
71	.double	0d0.15139067990543389159e+4
72qcoef:
73	.double	0d0.1e+1
74	.double	0d0.23318421142748162379e+3
75	.double	0d0.43682116627275584985e+4
76minarg:
77	.double	0d-88.028e+0
78maxarg:
79	.double	0d88.028e+0
80huge:	.double	0d1.7e+38
81loge10:
82	.double	0d2.30258509299404568401e+0
83sqrt2:
84	.double	0d1.41421356237309504880e+0
85log2e:
86	.double	0d1.44269504088896340735e+0
87log2ex:
88	.byte	0xbb
89