github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/math/dim_riscv64.s (about)

     1  // Copyright 2020 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  // Values returned from an FCLASS instruction.
     8  #define	NegInf	0x001
     9  #define	PosInf	0x080
    10  #define	NaN	0x200
    11  
    12  // func archMax(x, y float64) float64
    13  TEXT ·archMax(SB),NOSPLIT,$0
    14  	MOVD	x+0(FP), F0
    15  	MOVD	y+8(FP), F1
    16  	FCLASSD	F0, X5
    17  	FCLASSD	F1, X6
    18  
    19  	// +Inf special cases
    20  	MOV	$PosInf, X7
    21  	BEQ	X7, X5, isMaxX
    22  	BEQ	X7, X6, isMaxY
    23  
    24  	// NaN special cases
    25  	MOV	$NaN, X7
    26  	BEQ	X7, X5, isMaxX
    27  	BEQ	X7, X6, isMaxY
    28  
    29  	// normal case
    30  	FMAXD	F0, F1, F0
    31  	MOVD	F0, ret+16(FP)
    32  	RET
    33  
    34  isMaxX: // return x
    35  	MOVD	F0, ret+16(FP)
    36  	RET
    37  
    38  isMaxY: // return y
    39  	MOVD	F1, ret+16(FP)
    40  	RET
    41  
    42  // func archMin(x, y float64) float64
    43  TEXT ·archMin(SB),NOSPLIT,$0
    44  	MOVD	x+0(FP), F0
    45  	MOVD	y+8(FP), F1
    46  	FCLASSD	F0, X5
    47  	FCLASSD	F1, X6
    48  
    49  	// -Inf special cases
    50  	MOV	$NegInf, X7
    51  	BEQ	X7, X5, isMinX
    52  	BEQ	X7, X6, isMinY
    53  
    54  	// NaN special cases
    55  	MOV	$NaN, X7
    56  	BEQ	X7, X5, isMinX
    57  	BEQ	X7, X6, isMinY
    58  
    59  	// normal case
    60  	FMIND	F0, F1, F0
    61  	MOVD	F0, ret+16(FP)
    62  	RET
    63  
    64  isMinX: // return x
    65  	MOVD	F0, ret+16(FP)
    66  	RET
    67  
    68  isMinY: // return y
    69  	MOVD	F1, ret+16(FP)
    70  	RET