github.com/MangoDowner/go-gm@v0.0.0-20180818020936-8baa2bd4408c/src/math/dim_arm64.s (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "textflag.h" 6 7 #define PosInf 0x7FF0000000000000 8 #define NaN 0x7FF8000000000001 9 #define NegInf 0xFFF0000000000000 10 11 // func Dim(x, y float64) float64 12 TEXT ·Dim(SB),NOSPLIT,$0 13 // (+Inf, +Inf) special case 14 MOVD $PosInf, R0 15 MOVD x+0(FP), R1 16 MOVD y+8(FP), R2 17 CMP R0, R1 18 BNE dim2 19 CMP R0, R2 20 BEQ bothInf 21 dim2: // (-Inf, -Inf) special case 22 MOVD $NegInf, R0 23 CMP R0, R1 24 BNE dim3 25 CMP R0, R2 26 BEQ bothInf 27 dim3: // normal case 28 FMOVD R1, F0 29 FMOVD R2, F1 30 FMOVD $0.0, F2 31 FSUBD F1, F0 32 FMAXD F0, F2, F0 33 FMOVD F0, ret+16(FP) 34 RET 35 bothInf: 36 MOVD $NaN, R0 37 MOVD R0, ret+16(FP) 38 RET 39 40 // func ·Max(x, y float64) float64 41 TEXT ·Max(SB),NOSPLIT,$0 42 // +Inf special cases 43 MOVD $PosInf, R0 44 MOVD x+0(FP), R1 45 CMP R0, R1 46 BEQ isPosInf 47 MOVD y+8(FP), R2 48 CMP R0, R2 49 BEQ isPosInf 50 // normal case 51 FMOVD R1, F0 52 FMOVD R2, F1 53 FMAXD F0, F1, F0 54 FMOVD F0, ret+16(FP) 55 RET 56 isPosInf: // return +Inf 57 MOVD R0, ret+16(FP) 58 RET 59 60 // func Min(x, y float64) float64 61 TEXT ·Min(SB),NOSPLIT,$0 62 // -Inf special cases 63 MOVD $NegInf, R0 64 MOVD x+0(FP), R1 65 CMP R0, R1 66 BEQ isNegInf 67 MOVD y+8(FP), R2 68 CMP R0, R2 69 BEQ isNegInf 70 // normal case 71 FMOVD R1, F0 72 FMOVD R2, F1 73 FMIND F0, F1, F0 74 FMOVD F0, ret+16(FP) 75 RET 76 isNegInf: // return -Inf 77 MOVD R0, ret+16(FP) 78 RET