Skip to content

Commit 939f9fd

Browse files
wdvxdr1123gopherbot
authored andcommitted
runtime/internal/syscall: use ABIInternal for Syscall6 on riscv64
Change-Id: Iceed0f55038c87f261b60309e025132142946364 Reviewed-on: https://go-review.googlesource.com/c/go/+/443557 Run-TryBot: Wayne Zuo <[email protected]> Reviewed-by: Michael Pratt <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Auto-Submit: Wayne Zuo <[email protected]>
1 parent d290120 commit 939f9fd

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

src/runtime/internal/syscall/asm_linux_riscv64.s

+30-16
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,39 @@
55
#include "textflag.h"
66

77
// func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr)
8-
TEXT ·Syscall6(SB),NOSPLIT,$0-80
9-
MOV num+0(FP), A7 // syscall entry
10-
MOV a1+8(FP), A0
11-
MOV a2+16(FP), A1
12-
MOV a3+24(FP), A2
13-
MOV a4+32(FP), A3
14-
MOV a5+40(FP), A4
15-
MOV a6+48(FP), A5
8+
//
9+
// We need to convert to the syscall ABI.
10+
//
11+
// arg | ABIInternal | Syscall
12+
// ---------------------------
13+
// num | A0 | A7
14+
// a1 | A1 | A0
15+
// a2 | A2 | A1
16+
// a3 | A3 | A2
17+
// a4 | A4 | A3
18+
// a5 | A5 | A4
19+
// a6 | A6 | A5
20+
//
21+
// r1 | A0 | A0
22+
// r2 | A1 | A1
23+
// err | A2 | part of A0
24+
TEXT ·Syscall6<ABIInternal>(SB),NOSPLIT,$0-80
25+
MOV A0, A7
26+
MOV A1, A0
27+
MOV A2, A1
28+
MOV A3, A2
29+
MOV A4, A3
30+
MOV A5, A4
31+
MOV A6, A5
1632
ECALL
1733
MOV $-4096, T0
1834
BLTU T0, A0, err
19-
MOV A0, r1+56(FP)
20-
MOV A1, r2+64(FP)
21-
MOV ZERO, errno+72(FP)
35+
// r1 already in A0
36+
// r2 already in A1
37+
MOV ZERO, A2 // errno
2238
RET
2339
err:
24-
MOV $-1, T0
25-
MOV T0, r1+56(FP)
26-
MOV ZERO, r2+64(FP)
27-
SUB A0, ZERO, A0
28-
MOV A0, errno+72(FP)
40+
SUB A0, ZERO, A2 // errno
41+
MOV $-1, A0 // r1
42+
MOV ZERO, A1 // r2
2943
RET

0 commit comments

Comments
 (0)