| // 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 路archMax(x, y float64) float64 | |
| TEXT 路archMax(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 archMin(x, y float64) float64 | |
| TEXT 路archMin(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 | |