Text file src/pkg/syscall/asm_openbsd_arm64.s
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 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
8 TEXT ·Syscall(SB),NOSPLIT,$0-56
9 BL runtime·entersyscall(SB)
10 MOVD a1+8(FP), R0
11 MOVD a2+16(FP), R1
12 MOVD a3+24(FP), R2
13 MOVD $0, R3
14 MOVD $0, R4
15 MOVD $0, R5
16 MOVD trap+0(FP), R8 // syscall number
17 SVC
18 BCC ok
19 MOVD $-1, R4
20 MOVD R4, r1+32(FP) // r1
21 MOVD ZR, r2+40(FP) // r2
22 MOVD R0, err+48(FP) // errno
23 BL runtime·exitsyscall(SB)
24 RET
25 ok:
26 MOVD R0, r1+32(FP) // r1
27 MOVD R1, r2+40(FP) // r2
28 MOVD ZR, err+48(FP) // errno
29 BL runtime·exitsyscall(SB)
30 RET
31
32 TEXT ·Syscall6(SB),NOSPLIT,$0-80
33 BL runtime·entersyscall(SB)
34 MOVD a1+8(FP), R0
35 MOVD a2+16(FP), R1
36 MOVD a3+24(FP), R2
37 MOVD a4+32(FP), R3
38 MOVD a5+40(FP), R4
39 MOVD a6+48(FP), R5
40 MOVD trap+0(FP), R8 // syscall number
41 SVC
42 BCC ok
43 MOVD $-1, R4
44 MOVD R4, r1+56(FP) // r1
45 MOVD ZR, r2+64(FP) // r2
46 MOVD R0, err+72(FP) // errno
47 BL runtime·exitsyscall(SB)
48 RET
49 ok:
50 MOVD R0, r1+56(FP) // r1
51 MOVD R1, r2+64(FP) // r2
52 MOVD ZR, err+72(FP) // errno
53 BL runtime·exitsyscall(SB)
54 RET
55
56 TEXT ·Syscall9(SB),NOSPLIT,$0-104
57 BL runtime·entersyscall(SB)
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 MOVD a7+56(FP), R6
65 MOVD a8+64(FP), R7
66 MOVD a9+72(FP), R8 // on stack
67 MOVD R8, 8(RSP)
68 MOVD num+0(FP), R8 // syscall number
69 SVC
70 BCC ok
71 MOVD $-1, R4
72 MOVD R4, r1+80(FP) // r1
73 MOVD ZR, r2+88(FP) // r2
74 MOVD R0, err+96(FP) // errno
75 BL runtime·exitsyscall(SB)
76 RET
77 ok:
78 MOVD R0, r1+80(FP) // r1
79 MOVD R1, r2+88(FP) // r2
80 MOVD ZR, err+96(FP) // errno
81 BL runtime·exitsyscall(SB)
82 RET
83
84 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
85 MOVD a1+8(FP), R0
86 MOVD a2+16(FP), R1
87 MOVD a3+24(FP), R2
88 MOVD $0, R3
89 MOVD $0, R4
90 MOVD $0, R5
91 MOVD trap+0(FP), R8 // syscall number
92 SVC
93 BCC ok
94 MOVD $-1, R4
95 MOVD R4, r1+32(FP) // r1
96 MOVD ZR, r2+40(FP) // r2
97 MOVD R0, err+48(FP) // errno
98 RET
99 ok:
100 MOVD R0, r1+32(FP) // r1
101 MOVD R1, r2+40(FP) // r2
102 MOVD ZR, err+48(FP) // errno
103 RET
104
105 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
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 trap+0(FP), R8 // syscall number
113 SVC
114 BCC ok
115 MOVD $-1, R4
116 MOVD R4, r1+56(FP) // r1
117 MOVD ZR, r2+64(FP) // r2
118 MOVD R0, err+72(FP) // errno
119 RET
120 ok:
121 MOVD R0, r1+56(FP) // r1
122 MOVD R1, r2+64(FP) // r2
123 MOVD ZR, err+72(FP) // errno
124 RET
View as plain text