xref: /csrg-svn/old/libm/liboldnm/asin.s (revision 20008)
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#	@(#)asin.s	5.1 (Berkeley) 05/08/85
7#
8#
9#double asin(arg)
10#double arg; -1.0<=arg<=1.0 or an out of range error return
11#method: call atan() after range reduction
12# calls: satan (internal entry point of atan.s), _sqrt
13# J F Jarvis August 8, 1078
14.globl	_asin
15.globl	_errno
16.globl	_sqrt
17.globl	satan
18.set	EDOM,33
19.text
20.align	1
21_asin:
22	.word	0x3c0
23	bispsw	$0xe0
24	movd	4(ap),r6
25	jgtr	a1
26	mnegd	r6,r6
27a1:	cmpd	r6,$0d1.0e+0
28	jleq	a2
29	movl	$EDOM,_errno
30	clrd	r0
31	ret
32#
33a2:	muld3	r6,r6,r0
34	subd3	r0,$0d1.0e+0,-(sp)
35	calls	$2,_sqrt
36	cmpd	r6,$0d0.6875
37	jleq	a3
38	divd2	r6,r0
39	jsb	satan
40	subd3	r0,pio2,r0
41	jbr	a4
42a3:	divd3	r0,r6,r0
43	jsb	satan
44a4:	tstd	4(ap)
45	jleq	a5
46	ret
47a5:	mnegd	r0,r0
48	ret
49.data
50.align	2
51pio2: .double 0d1.57079632679489661923e+0
52