| // Copyright 2009 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. | |
| // func Cos(x float64) float64 | |
| TEXT ·Cos(SB),7,$0 | |
| FMOVD x+0(FP), F0 // F0=x | |
| FCOS // F0=cos(x) if -2**63 < x < 2**63 | |
| FSTSW AX // AX=status word | |
| ANDW $0x0400, AX | |
| JNE 3(PC) // jump if x outside range | |
| FMOVDP F0, r+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 | |
| FCOS // F0=cos(reduced_x) | |
| FMOVDP F0, r+8(FP) | |
| RET | |
| // func Sin(x float64) float64 | |
| TEXT ·Sin(SB),7,$0 | |
| FMOVD x+0(FP), F0 // F0=x | |
| FSIN // F0=sin(x) if -2**63 < x < 2**63 | |
| FSTSW AX // AX=status word | |
| ANDW $0x0400, AX | |
| JNE 3(PC) // jump if x outside range | |
| FMOVDP F0, r+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 | |
| FSIN // F0=sin(reduced_x) | |
| FMOVDP F0, r+8(FP) | |
| RET |