...
Text file src/pkg/math/exp2_386.s
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 Exp2(x float64) float64
8 TEXT ·Exp2(SB),NOSPLIT,$0
9 // test bits for not-finite
10 MOVL x_hi+4(FP), AX
11 ANDL $0x7ff00000, AX
12 CMPL AX, $0x7ff00000
13 JEQ not_finite
14 FMOVD x+0(FP), F0 // F0=x
15 FMOVD F0, F1 // F0=x, F1=x
16 FRNDINT // F0=int(x), F1=x
17 FSUBD F0, F1 // F0=int(x), F1=x-int(x)
18 FXCHD F0, F1 // F0=x-int(x), F1=int(x)
19 F2XM1 // F0=2**(x-int(x))-1, F1=int(x)
20 FLD1 // F0=1, F1=2**(x-int(x))-1, F2=int(x)
21 FADDDP F0, F1 // F0=2**(x-int(x)), F1=int(x)
22 FSCALE // F0=2**x, F1=int(x)
23 FMOVDP F0, F1 // F0=2**x
24 FMOVDP F0, ret+8(FP)
25 RET
26 not_finite:
27 // test bits for -Inf
28 MOVL x_hi+4(FP), BX
29 MOVL x_lo+0(FP), CX
30 CMPL BX, $0xfff00000
31 JNE not_neginf
32 CMPL CX, $0
33 JNE not_neginf
34 MOVL $0, ret_lo+8(FP)
35 MOVL $0, ret_hi+12(FP)
36 RET
37 not_neginf:
38 MOVL CX, ret_lo+8(FP)
39 MOVL BX, ret_hi+12(FP)
40 RET
View as plain text