xref: /dflybsd-src/contrib/openbsd_libm/arch/amd64/e_acos.S (revision a27bb01fb90c87959b0c0dfacf7dd85d1308a35f)
105a0b428SJohn Marino/*	$OpenBSD: e_acos.S,v 1.4 2008/09/07 20:36:08 martynas Exp $ */
205a0b428SJohn Marino/*
305a0b428SJohn Marino * Written by J.T. Conklin <jtc@NetBSD.org>.
405a0b428SJohn Marino * Public domain.
505a0b428SJohn Marino */
605a0b428SJohn Marino
705a0b428SJohn Marino#include <machine/asm.h>
805a0b428SJohn Marino
905a0b428SJohn Marino#include "abi.h"
1005a0b428SJohn Marino
1105a0b428SJohn Marino/* acos = atan (sqrt(1 - x^2) / x) */
1205a0b428SJohn MarinoENTRY(acos)
1305a0b428SJohn Marino	XMM_ONE_ARG_DOUBLE_PROLOGUE
1405a0b428SJohn Marino	fldl	ARG_DOUBLE_ONE		/* x */
1505a0b428SJohn Marino	fld	%st(0)
1605a0b428SJohn Marino	fmul	%st(0)			/* x^2 */
1705a0b428SJohn Marino	fld1
1805a0b428SJohn Marino	fsubp				/* 1 - x^2 */
1905a0b428SJohn Marino	fsqrt				/* sqrt (1 - x^2) */
2005a0b428SJohn Marino	fxch	%st(1)
2105a0b428SJohn Marino	fpatan
2205a0b428SJohn Marino	XMM_DOUBLE_EPILOGUE
2305a0b428SJohn Marino	ret
24*a27bb01fSJohn MarinoEND(acos)
25*a27bb01fSJohn Marino
26*a27bb01fSJohn Marino	.section .note.GNU-stack,"",%progbits
27