Text file
src/math/dim_loong64.s
1 // Copyright 2024 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 TEXT ·archMax(SB),NOSPLIT,$0
12 MOVD x+0(FP), F0
13 MOVD y+8(FP), F1
14 FCLASSD F0, F2
15 FCLASSD F1, F3
16
17 // combine x and y categories together to judge
18 MOVV F2, R4
19 MOVV F3, R5
20 OR R5, R4
21
22 // +Inf special cases
23 AND $64, R4, R5
24 BNE R5, isPosInf
25
26 // NaN special cases
27 AND $2, R4, R5
28 BNE R5, isMaxNaN
29
30 // normal case
31 FMAXD F0, F1, F0
32 MOVD F0, ret+16(FP)
33 RET
34
35 isMaxNaN:
36 MOVV $NaN, R6
37 MOVV R6, ret+16(FP)
38 RET
39
40 isPosInf:
41 MOVV $PosInf, R6
42 MOVV R6, ret+16(FP)
43 RET
44
45 TEXT ·archMin(SB),NOSPLIT,$0
46 MOVD x+0(FP), F0
47 MOVD y+8(FP), F1
48 FCLASSD F0, F2
49 FCLASSD F1, F3
50
51 // combine x and y categories together to judge
52 MOVV F2, R4
53 MOVV F3, R5
54 OR R5, R4
55
56 // -Inf special cases
57 AND $4, R4, R5
58 BNE R5, isNegInf
59
60 // NaN special cases
61 AND $2, R4, R5
62 BNE R5, isMinNaN
63
64 // normal case
65 FMIND F0, F1, F0
66 MOVD F0, ret+16(FP)
67 RET
68
69 isMinNaN:
70 MOVV $NaN, R6
71 MOVV R6, ret+16(FP)
72 RET
73
74 isNegInf:
75 MOVV $NegInf, R6
76 MOVV R6, ret+16(FP)
77 RET
78
View as plain text