Black Lives Matter. Support the Equal Justice Initiative.

# Text file src/math/dim_amd64.s

## Documentation: math

```     1  // Copyright 2010 The Go Authors. All rights reserved.
2  // Use of this source code is governed by a BSD-style
4
5  #include "textflag.h"
6
7  #define PosInf 0x7FF0000000000000
8  #define NaN    0x7FF8000000000001
9  #define NegInf 0xFFF0000000000000
10
11  // func ·archMax(x, y float64) float64
12  TEXT ·archMax(SB),NOSPLIT,\$0
13  	// +Inf special cases
14  	MOVQ    \$PosInf, AX
15  	MOVQ    x+0(FP), R8
16  	CMPQ    AX, R8
17  	JEQ     isPosInf
18  	MOVQ    y+8(FP), R9
19  	CMPQ    AX, R9
20  	JEQ     isPosInf
21  	// NaN special cases
22  	MOVQ    \$~(1<<63), DX // bit mask
23  	MOVQ    \$PosInf, AX
24  	MOVQ    R8, BX
25  	ANDQ    DX, BX // x = |x|
26  	CMPQ    AX, BX
27  	JLT     isMaxNaN
28  	MOVQ    R9, CX
29  	ANDQ    DX, CX // y = |y|
30  	CMPQ    AX, CX
31  	JLT     isMaxNaN
32  	// ±0 special cases
33  	ORQ     CX, BX
34  	JEQ     isMaxZero
35
36  	MOVQ    R8, X0
37  	MOVQ    R9, X1
38  	MAXSD   X1, X0
39  	MOVSD   X0, ret+16(FP)
40  	RET
41  isMaxNaN: // return NaN
42  	MOVQ	\$NaN, AX
43  isPosInf: // return +Inf
44  	MOVQ    AX, ret+16(FP)
45  	RET
46  isMaxZero:
47  	MOVQ    \$(1<<63), AX // -0.0
48  	CMPQ    AX, R8
49  	JEQ     +3(PC)
50  	MOVQ    R8, ret+16(FP) // return 0
51  	RET
52  	MOVQ    R9, ret+16(FP) // return other 0
53  	RET
54
55  // func archMin(x, y float64) float64
56  TEXT ·archMin(SB),NOSPLIT,\$0
57  	// -Inf special cases
58  	MOVQ    \$NegInf, AX
59  	MOVQ    x+0(FP), R8
60  	CMPQ    AX, R8
61  	JEQ     isNegInf
62  	MOVQ    y+8(FP), R9
63  	CMPQ    AX, R9
64  	JEQ     isNegInf
65  	// NaN special cases
66  	MOVQ    \$~(1<<63), DX
67  	MOVQ    \$PosInf, AX
68  	MOVQ    R8, BX
69  	ANDQ    DX, BX // x = |x|
70  	CMPQ    AX, BX
71  	JLT     isMinNaN
72  	MOVQ    R9, CX
73  	ANDQ    DX, CX // y = |y|
74  	CMPQ    AX, CX
75  	JLT     isMinNaN
76  	// ±0 special cases
77  	ORQ     CX, BX
78  	JEQ     isMinZero
79
80  	MOVQ    R8, X0
81  	MOVQ    R9, X1
82  	MINSD   X1, X0
83  	MOVSD X0, ret+16(FP)
84  	RET
85  isMinNaN: // return NaN
86  	MOVQ	\$NaN, AX
87  isNegInf: // return -Inf
88  	MOVQ    AX, ret+16(FP)
89  	RET
90  isMinZero:
91  	MOVQ    \$(1<<63), AX // -0.0
92  	CMPQ    AX, R8
93  	JEQ     +3(PC)
94  	MOVQ    R9, ret+16(FP) // return other 0
95  	RET
96  	MOVQ    R8, ret+16(FP) // return -0
97  	RET
98
99
```

View as plain text