xref: /openbsd/lib/libm/arch/amd64/e_acos.S (revision 771fbea0)
1/*	$OpenBSD: e_acos.S,v 1.6 2018/07/03 22:43:34 mortimer Exp $ */
2/*
3 * Written by J.T. Conklin <jtc@NetBSD.org>.
4 * Public domain.
5 */
6
7#include <machine/asm.h>
8
9#include "abi.h"
10
11/* acos = atan (sqrt(1 - x^2) / x) */
12ENTRY(acos)
13	RETGUARD_SETUP(acos, r11)
14	XMM_ONE_ARG_DOUBLE_PROLOGUE
15	fldl	ARG_DOUBLE_ONE		/* x */
16	fld	%st(0)
17	fmul	%st(0)			/* x^2 */
18	fld1
19	fsubp				/* 1 - x^2 */
20	fsqrt				/* sqrt (1 - x^2) */
21	fxch	%st(1)
22	fpatan
23	XMM_DOUBLE_EPILOGUE
24	RETGUARD_CHECK(acos, r11)
25	ret
26END(acos)
27