|  | // Copyright 2016 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" | 
|  |  | 
|  | #define PosInf 0x7FF0000000000000 | 
|  | #define NaN    0x7FF8000000000001 | 
|  | #define NegInf 0xFFF0000000000000 | 
|  |  | 
|  | // func ·Max(x, y float64) float64 | 
|  | TEXT ·Max(SB),NOSPLIT,$0 | 
|  | // +Inf special cases | 
|  | MOVD	$PosInf, R0 | 
|  | MOVD	x+0(FP), R1 | 
|  | CMP	R0, R1 | 
|  | BEQ	isPosInf | 
|  | MOVD	y+8(FP), R2 | 
|  | CMP	R0, R2 | 
|  | BEQ	isPosInf | 
|  | // normal case | 
|  | FMOVD	R1, F0 | 
|  | FMOVD	R2, F1 | 
|  | FMAXD	F0, F1, F0 | 
|  | FMOVD	F0, ret+16(FP) | 
|  | RET | 
|  | isPosInf: // return +Inf | 
|  | MOVD	R0, ret+16(FP) | 
|  | RET | 
|  |  | 
|  | // func Min(x, y float64) float64 | 
|  | TEXT ·Min(SB),NOSPLIT,$0 | 
|  | // -Inf special cases | 
|  | MOVD	$NegInf, R0 | 
|  | MOVD	x+0(FP), R1 | 
|  | CMP	R0, R1 | 
|  | BEQ	isNegInf | 
|  | MOVD	y+8(FP), R2 | 
|  | CMP	R0, R2 | 
|  | BEQ	isNegInf | 
|  | // normal case | 
|  | FMOVD	R1, F0 | 
|  | FMOVD	R2, F1 | 
|  | FMIND	F0, F1, F0 | 
|  | FMOVD	F0, ret+16(FP) | 
|  | RET | 
|  | isNegInf: // return -Inf | 
|  | MOVD	R0, ret+16(FP) | 
|  | RET |