...

# Text file src/math/dim_s390x.s

## Documentation: math

```     1	// Copyright 2016 The Go Authors. All rights reserved.
2	// Use of this source code is governed by a BSD-style
4
5	// Based on dim_amd64.s
6
7	#include "textflag.h"
8
9	#define PosInf 0x7FF0000000000000
10	#define NaN    0x7FF8000000000001
11	#define NegInf 0xFFF0000000000000
12
13	// func ·Max(x, y float64) float64
14	TEXT ·Max(SB),NOSPLIT,\$0
15		// +Inf special cases
16		MOVD    \$PosInf, R4
17		MOVD    x+0(FP), R8
18		CMPUBEQ R4, R8, isPosInf
19		MOVD    y+8(FP), R9
20		CMPUBEQ R4, R9, isPosInf
21		// NaN special cases
22		MOVD    \$~(1<<63), R5 // bit mask
23		MOVD    \$PosInf, R4
24		MOVD    R8, R2
25		AND     R5, R2 // x = |x|
26		CMPUBLT R4, R2, isMaxNaN
27		MOVD    R9, R3
28		AND     R5, R3 // y = |y|
29		CMPUBLT R4, R3, isMaxNaN
30		// ±0 special cases
31		OR      R3, R2
32		BEQ     isMaxZero
33
34		FMOVD   x+0(FP), F1
35		FMOVD   y+8(FP), F2
36		FCMPU   F2, F1
37		BGT     +3(PC)
38		FMOVD   F1, ret+16(FP)
39		RET
40		FMOVD   F2, ret+16(FP)
41		RET
42	isMaxNaN: // return NaN
43		MOVD	\$NaN, R4
44	isPosInf: // return +Inf
45		MOVD    R4, ret+16(FP)
46		RET
47	isMaxZero:
48		MOVD    \$(1<<63), R4 // -0.0
49		CMPUBEQ R4, R8, +3(PC)
50		MOVD    R8, ret+16(FP) // return 0
51		RET
52		MOVD    R9, ret+16(FP) // return other 0
53		RET
54
55	// func Min(x, y float64) float64
56	TEXT ·Min(SB),NOSPLIT,\$0
57		// -Inf special cases
58		MOVD    \$NegInf, R4
59		MOVD    x+0(FP), R8
60		CMPUBEQ R4, R8, isNegInf
61		MOVD    y+8(FP), R9
62		CMPUBEQ R4, R9, isNegInf
63		// NaN special cases
64		MOVD    \$~(1<<63), R5
65		MOVD    \$PosInf, R4
66		MOVD    R8, R2
67		AND     R5, R2 // x = |x|
68		CMPUBLT R4, R2, isMinNaN
69		MOVD    R9, R3
70		AND     R5, R3 // y = |y|
71		CMPUBLT R4, R3, isMinNaN
72		// ±0 special cases
73		OR      R3, R2
74		BEQ     isMinZero
75
76		FMOVD   x+0(FP), F1
77		FMOVD   y+8(FP), F2
78		FCMPU   F2, F1
79		BLT     +3(PC)
80		FMOVD   F1, ret+16(FP)
81		RET
82		FMOVD   F2, ret+16(FP)
83		RET
84	isMinNaN: // return NaN
85		MOVD	\$NaN, R4
86	isNegInf: // return -Inf
87		MOVD    R4, ret+16(FP)
88		RET
89	isMinZero:
90		MOVD    \$(1<<63), R4 // -0.0
91		CMPUBEQ R4, R8, +3(PC)
92		MOVD    R9, ret+16(FP) // return other 0
93		RET
94		MOVD    R8, ret+16(FP) // return -0
95		RET
96
```

View as plain text