1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "textflag.h" 6 7 // func Tan(x float64) float64 8 TEXT Tan(SB),NOSPLIT,$0 9 FMOVD x+0(FP), F0 // F0=x 10 FPTAN // F0=1, F1=tan(x) if -2**63 < x < 2**63 11 FSTSW AX // AX=status word 12 ANDW $0x0400, AX 13 JNE 4(PC) // jump if x outside range 14 FMOVDP F0, F0 // F0=tan(x) 15 FMOVDP F0, ret+8(FP) 16 RET 17 FLDPI // F0=Pi, F1=x 18 FADDD F0, F0 // F0=2*Pi, F1=x 19 FXCHD F0, F1 // F0=x, F1=2*Pi 20 FPREM1 // F0=reduced_x, F1=2*Pi 21 FSTSW AX // AX=status word 22 ANDW $0x0400, AX 23 JNE -3(PC) // jump if reduction incomplete 24 FMOVDP F0, F1 // F0=reduced_x 25 FPTAN // F0=1, F1=tan(reduced_x) 26 FMOVDP F0, F0 // F0=tan(reduced_x) 27 FMOVDP F0, ret+8(FP) 28 RET 29