...
1// Copyright 2022 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// func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr)
8//
9// We need to convert to the syscall ABI.
10//
11// arg | ABIInternal | Syscall
12// ---------------------------
13// num | AX | AX
14// a1 | BX | DI
15// a2 | CX | SI
16// a3 | DI | DX
17// a4 | SI | R10
18// a5 | R8 | R8
19// a6 | R9 | R9
20//
21// r1 | AX | AX
22// r2 | BX | DX
23// err | CX | part of AX
24//
25// Note that this differs from "standard" ABI convention, which would pass 4th
26// arg in CX, not R10.
27TEXT ·Syscall6<ABIInternal>(SB),NOSPLIT,$0
28 // a6 already in R9.
29 // a5 already in R8.
30 MOVQ SI, R10 // a4
31 MOVQ DI, DX // a3
32 MOVQ CX, SI // a2
33 MOVQ BX, DI // a1
34 // num already in AX.
35 SYSCALL
36 CMPQ AX, $0xfffffffffffff001
37 JLS ok
38 NEGQ AX
39 MOVQ AX, CX // errno
40 MOVQ $-1, AX // r1
41 MOVQ $0, BX // r2
42 RET
43ok:
44 // r1 already in AX.
45 MOVQ DX, BX // r2
46 MOVQ $0, CX // errno
47 RET
View as plain text