#double asin(arg)
#double arg; -1.0<=arg<=1.0 or an out of range error return
#method: call atan() after range reduction
# calls: satan (internal entry point of atan.s), _sqrt
# J F Jarvis August 8, 1078
.globl	_asin
.globl	_errno
.globl	_sqrt
.globl	satan
.set	EDOM,33
.text
.align	1
_asin:
	.word	0x0c0
	movd	4(ap),r6
	jgtr	a1
	mnegd	r6,r6
a1:	cmpd	r6,$0d1.0e+0
	jleq	a2
	movl	$EDOM,_errno
	clrd	r0
	ret
#
a2:	muld3	r6,r6,r0
	subd3	r0,$0d1.0e+0,-(sp)
	calls	$2,_sqrt
	cmpd	r6,$0d0.6875
	jleq	a3
	divd2	r6,r0
	jsb	satan
	subd3	r0,pio2,r0
	jbr	a4
a3:	divd3	r0,r6,r0
	jsb	satan
a4:	tstd	4(ap)
	jleq	a5
	ret
a5:	mnegd	r0,r0
	ret
.data
.align	3
pio2: .double 0d1.57079632679489661923e+0
