mirror of
https://github.com/golang/go.git
synced 2025-05-19 06:14:40 +00:00
runtime/internal/syscall: use ABIInternal for Syscall6 on loong64
Updates #40724 Co-authored-by: Xiaolin Zhao <zhaoxiaolin@loongson.cn> Change-Id: Ifcc2de35a797fd987a10f564206b14b54d736d1d Reviewed-on: https://go-review.googlesource.com/c/go/+/521789 Auto-Submit: David Chase <drchase@google.com> Reviewed-by: Meidan Li <limeidan@loongson.cn> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: David Chase <drchase@google.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
b3b442449b
commit
2e77b51df5
@ -5,7 +5,32 @@
|
||||
#include "textflag.h"
|
||||
|
||||
// func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr)
|
||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||
//
|
||||
// We need to convert to the syscall ABI.
|
||||
//
|
||||
// arg | ABIInternal | Syscall
|
||||
// ---------------------------
|
||||
// num | R4 | R11
|
||||
// a1 | R5 | R4
|
||||
// a2 | R6 | R5
|
||||
// a3 | R7 | R6
|
||||
// a4 | R8 | R7
|
||||
// a5 | R9 | R8
|
||||
// a6 | R10 | R9
|
||||
//
|
||||
// r1 | R4 | R4
|
||||
// r2 | R5 | R5
|
||||
// err | R6 | part of R4
|
||||
TEXT ·Syscall6<ABIInternal>(SB),NOSPLIT,$0-80
|
||||
#ifdef GOEXPERIMENT_regabiargs
|
||||
MOVV R4, R11 // syscall entry
|
||||
MOVV R5, R4
|
||||
MOVV R6, R5
|
||||
MOVV R7, R6
|
||||
MOVV R8, R7
|
||||
MOVV R9, R8
|
||||
MOVV R10, R9
|
||||
#else
|
||||
MOVV num+0(FP), R11 // syscall entry
|
||||
MOVV a1+8(FP), R4
|
||||
MOVV a2+16(FP), R5
|
||||
@ -13,7 +38,15 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||
MOVV a4+32(FP), R7
|
||||
MOVV a5+40(FP), R8
|
||||
MOVV a6+48(FP), R9
|
||||
#endif
|
||||
SYSCALL
|
||||
#ifdef GOEXPERIMENT_regabiargs
|
||||
MOVV R0, R5 // r2 is not used. Always set to 0.
|
||||
MOVW $-4096, R12
|
||||
BGEU R12, R4, ok
|
||||
SUBVU R4, R0, R6 // errno
|
||||
MOVV $-1, R4 // r1
|
||||
#else
|
||||
MOVW $-4096, R12
|
||||
BGEU R12, R4, ok
|
||||
MOVV $-1, R12
|
||||
@ -21,9 +54,15 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||
MOVV R0, r2+64(FP)
|
||||
SUBVU R4, R0, R4
|
||||
MOVV R4, errno+72(FP)
|
||||
#endif
|
||||
RET
|
||||
ok:
|
||||
#ifdef GOEXPERIMENT_regabiargs
|
||||
// r1 already in R4
|
||||
MOVV R0, R6 // errno
|
||||
#else
|
||||
MOVV R4, r1+56(FP)
|
||||
MOVV R0, r2+64(FP) // r2 is not used. Always set to 0.
|
||||
MOVV R0, errno+72(FP)
|
||||
#endif
|
||||
RET
|
||||
|
Loading…
x
Reference in New Issue
Block a user