xref: /openbsd-src/lib/libm/arch/amd64/s_sin.S (revision 3ba7702be0c7af3f580acc0a15f2fb78868ef980)
1*3ba7702bSmortimer/*	$OpenBSD: s_sin.S,v 1.4 2018/07/03 22:43:34 mortimer Exp $ */
23ccbf660Sderaadt/*
33ccbf660Sderaadt * Written by J.T. Conklin <jtc@NetBSD.org>.
43ccbf660Sderaadt * Public domain.
53ccbf660Sderaadt */
63ccbf660Sderaadt
73ccbf660Sderaadt#include <machine/asm.h>
83ccbf660Sderaadt
93ccbf660Sderaadt#include "abi.h"
103ccbf660Sderaadt
113ccbf660SderaadtENTRY(sin)
12*3ba7702bSmortimer	RETGUARD_SETUP(sin, r11)
133ccbf660Sderaadt	XMM_ONE_ARG_DOUBLE_PROLOGUE
143ccbf660Sderaadt	fldl	ARG_DOUBLE_ONE
153ccbf660Sderaadt	fsin
163ccbf660Sderaadt	fnstsw	%ax
173ccbf660Sderaadt	andw	$0x400,%ax
183ccbf660Sderaadt	jnz	1f
193ccbf660Sderaadt	XMM_DOUBLE_EPILOGUE
20*3ba7702bSmortimer	RETGUARD_CHECK(sin, r11)
213ccbf660Sderaadt	ret
223ccbf660Sderaadt1:	fldpi
233ccbf660Sderaadt	fadd	%st(0)
243ccbf660Sderaadt	fxch	%st(1)
253ccbf660Sderaadt2:	fprem1
263ccbf660Sderaadt	fnstsw	%ax
273ccbf660Sderaadt	andw	$0x400,%ax
283ccbf660Sderaadt	jnz	2b
293ccbf660Sderaadt	fstp	%st(1)
303ccbf660Sderaadt	fsin
313ccbf660Sderaadt	XMM_DOUBLE_EPILOGUE
32*3ba7702bSmortimer	RETGUARD_CHECK(sin, r11)
333ccbf660Sderaadt	ret
342f2c0062SguentherEND_STD(sin)
35