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