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