Skip to content

Commit 03e6073

Browse files
committed
math: implement Min/Max in riscv64 assembly
Change-Id: If34422859d47bc8f44974a00c6b7908e7655ff41 Reviewed-on: https://go-review.googlesource.com/c/go/+/223561 Reviewed-by: Cherry Zhang <[email protected]>
1 parent 1dcbd8d commit 03e6073

File tree

2 files changed

+70
-6
lines changed

2 files changed

+70
-6
lines changed

src/math/dim_riscv64.s

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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 Max(x, y float64) float64
13+
TEXT ·Max(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 Min(x, y float64) float64
43+
TEXT ·Min(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

src/math/stubs_riscv64.s

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ TEXT ·Atan(SB),NOSPLIT,$0
2525
TEXT ·Atanh(SB),NOSPLIT,$0
2626
JMP ·atanh(SB)
2727

28-
TEXT ·Min(SB),NOSPLIT,$0
29-
JMP ·min(SB)
30-
31-
TEXT ·Max(SB),NOSPLIT,$0
32-
JMP ·max(SB)
33-
3428
TEXT ·Erf(SB),NOSPLIT,$0
3529
JMP ·erf(SB)
3630

0 commit comments

Comments
 (0)