Text file
src/syscall/asm_freebsd_arm64.s
Documentation: syscall
1// Copyright 2019 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//
8// System call support for ARM64, FreeBSD
9//
10
11#define SYS_syscall 0
12
13// func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr)
14TEXT ·Syscall(SB),NOSPLIT,$0-56
15 BL runtime·entersyscall<ABIInternal>(SB)
16 MOVD trap+0(FP), R8 // syscall entry
17 MOVD a1+8(FP), R0
18 MOVD a2+16(FP), R1
19 MOVD a3+24(FP), R2
20 SVC $SYS_syscall
21 BCC ok
22 MOVD $-1, R1
23 MOVD R1, r1+32(FP)
24 MOVD ZR, r2+40(FP)
25 MOVD R0, err+48(FP)
26 BL runtime·exitsyscall<ABIInternal>(SB)
27 RET
28ok:
29 MOVD R0, r1+32(FP)
30 MOVD R1, r2+40(FP)
31 MOVD ZR, err+48(FP)
32 BL runtime·exitsyscall<ABIInternal>(SB)
33 RET
34
35// func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr)
36TEXT ·RawSyscall(SB),NOSPLIT,$0-56
37 MOVD trap+0(FP), R8 // syscall entry
38 MOVD a1+8(FP), R0
39 MOVD a2+16(FP), R1
40 MOVD a3+24(FP), R2
41 SVC $SYS_syscall
42 BCC ok
43 MOVD $-1, R1
44 MOVD R1, r1+32(FP)
45 MOVD ZR, r2+40(FP)
46 MOVD R0, err+48(FP)
47 RET
48ok:
49 MOVD R0, r1+32(FP)
50 MOVD R1, r2+40(FP)
51 MOVD ZR, err+48(FP)
52 RET
53
54// func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
55TEXT ·Syscall6(SB),NOSPLIT,$0-80
56 BL runtime·entersyscall<ABIInternal>(SB)
57 MOVD trap+0(FP), R8 // syscall entry
58 MOVD a1+8(FP), R0
59 MOVD a2+16(FP), R1
60 MOVD a3+24(FP), R2
61 MOVD a4+32(FP), R3
62 MOVD a5+40(FP), R4
63 MOVD a6+48(FP), R5
64 SVC $SYS_syscall
65 BCC ok
66 MOVD $-1, R1
67 MOVD R1, r1+56(FP)
68 MOVD ZR, r2+64(FP)
69 MOVD R0, err+72(FP)
70 BL runtime·exitsyscall<ABIInternal>(SB)
71 RET
72ok:
73 MOVD R0, r1+56(FP)
74 MOVD R1, r2+64(FP)
75 MOVD ZR, err+72(FP)
76 BL runtime·exitsyscall<ABIInternal>(SB)
77 RET
78
79// func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
80TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
81 MOVD trap+0(FP), R8 // syscall entry
82 MOVD a1+8(FP), R0
83 MOVD a2+16(FP), R1
84 MOVD a3+24(FP), R2
85 MOVD a4+32(FP), R3
86 MOVD a5+40(FP), R4
87 MOVD a6+48(FP), R5
88 SVC $SYS_syscall
89 BCC ok
90 MOVD $-1, R1
91 MOVD R1, r1+56(FP)
92 MOVD ZR, r2+64(FP)
93 MOVD R0, err+72(FP)
94 RET
95ok:
96 MOVD R0, r1+56(FP)
97 MOVD R1, r2+64(FP)
98 MOVD ZR, err+72(FP)
99 RET
100
101// Actually Syscall7
102// func Syscall9(num uintptr, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, err uintptr)
103TEXT ·Syscall9(SB),NOSPLIT,$0-104
104 BL runtime·entersyscall<ABIInternal>(SB)
105 MOVD num+0(FP), R8 // syscall entry
106 MOVD a1+8(FP), R0
107 MOVD a2+16(FP), R1
108 MOVD a3+24(FP), R2
109 MOVD a4+32(FP), R3
110 MOVD a5+40(FP), R4
111 MOVD a6+48(FP), R5
112 MOVD a7+56(FP), R6
113 // MOVD a8+64(FP), R7
114 // MOVD a9+72(FP), R8
115 SVC $SYS_syscall
116 BCC ok
117 MOVD $-1, R1
118 MOVD R1, r1+80(FP)
119 MOVD ZR, r2+88(FP)
120 MOVD R0, err+96(FP)
121 BL runtime·exitsyscall<ABIInternal>(SB)
122 RET
123ok:
124 MOVD R0, r1+80(FP)
125 MOVD R1, r2+88(FP)
126 MOVD ZR, err+96(FP)
127 BL runtime·exitsyscall<ABIInternal>(SB)
128 RET
View as plain text