// Copyright 2010 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "../../cmd/ld/textflag.h"

// func Tan(x float64) float64
TEXT ·Tan(SB),NOSPLIT,$0
	FMOVD   x+0(FP), F0  // F0=x
	FPTAN                // F0=1, F1=tan(x) if -2**63 < x < 2**63
	FSTSW   AX           // AX=status word
	ANDW    $0x0400, AX
	JNE     4(PC)        // jump if x outside range
	FMOVDP  F0, F0       // F0=tan(x)
	FMOVDP  F0, ret+8(FP)
	RET
	FLDPI                // F0=Pi, F1=x
	FADDD   F0, F0       // F0=2*Pi, F1=x
	FXCHD   F0, F1       // F0=x, F1=2*Pi
	FPREM1               // F0=reduced_x, F1=2*Pi
	FSTSW   AX           // AX=status word
	ANDW    $0x0400, AX
	JNE     -3(PC)       // jump if reduction incomplete
	FMOVDP  F0, F1       // F0=reduced_x
	FPTAN                // F0=1, F1=tan(reduced_x)
	FMOVDP  F0, F0       // F0=tan(reduced_x)
	FMOVDP  F0, ret+8(FP)
	RET
