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