| // Copyright 2020 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. | 
 |  | 
 | #include "textflag.h" | 
 |  | 
 | // Values returned from an FCLASS instruction. | 
 | #define	NegInf	0x001 | 
 | #define	PosInf	0x080 | 
 | #define	NaN	0x200 | 
 |  | 
 | // func archMax(x, y float64) float64 | 
 | TEXT ·archMax(SB),NOSPLIT,$0 | 
 | 	MOVD	x+0(FP), F0 | 
 | 	MOVD	y+8(FP), F1 | 
 | 	FCLASSD	F0, X5 | 
 | 	FCLASSD	F1, X6 | 
 |  | 
 | 	// +Inf special cases | 
 | 	MOV	$PosInf, X7 | 
 | 	BEQ	X7, X5, isMaxX | 
 | 	BEQ	X7, X6, isMaxY | 
 |  | 
 | 	// NaN special cases | 
 | 	MOV	$NaN, X7 | 
 | 	BEQ	X7, X5, isMaxX | 
 | 	BEQ	X7, X6, isMaxY | 
 |  | 
 | 	// normal case | 
 | 	FMAXD	F0, F1, F0 | 
 | 	MOVD	F0, ret+16(FP) | 
 | 	RET | 
 |  | 
 | isMaxX: // return x | 
 | 	MOVD	F0, ret+16(FP) | 
 | 	RET | 
 |  | 
 | isMaxY: // return y | 
 | 	MOVD	F1, ret+16(FP) | 
 | 	RET | 
 |  | 
 | // func archMin(x, y float64) float64 | 
 | TEXT ·archMin(SB),NOSPLIT,$0 | 
 | 	MOVD	x+0(FP), F0 | 
 | 	MOVD	y+8(FP), F1 | 
 | 	FCLASSD	F0, X5 | 
 | 	FCLASSD	F1, X6 | 
 |  | 
 | 	// -Inf special cases | 
 | 	MOV	$NegInf, X7 | 
 | 	BEQ	X7, X5, isMinX | 
 | 	BEQ	X7, X6, isMinY | 
 |  | 
 | 	// NaN special cases | 
 | 	MOV	$NaN, X7 | 
 | 	BEQ	X7, X5, isMinX | 
 | 	BEQ	X7, X6, isMinY | 
 |  | 
 | 	// normal case | 
 | 	FMIND	F0, F1, F0 | 
 | 	MOVD	F0, ret+16(FP) | 
 | 	RET | 
 |  | 
 | isMinX: // return x | 
 | 	MOVD	F0, ret+16(FP) | 
 | 	RET | 
 |  | 
 | isMinY: // return y | 
 | 	MOVD	F1, ret+16(FP) | 
 | 	RET |