LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2013 The Go Authors. All rights reserved. | 1 // Copyright 2013 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 // | 4 // |
5 // System calls and other sys.stuff for ARM, NetBSD | 5 // System calls and other sys.stuff for ARM, NetBSD |
6 // /usr/src/sys/kern/syscalls.master for syscall numbers. | 6 // /usr/src/sys/kern/syscalls.master for syscall numbers. |
7 // | 7 // |
8 | 8 |
9 #include "zasm_GOOS_GOARCH.h" | 9 #include "zasm_GOOS_GOARCH.h" |
| 10 #include "../../cmd/ld/textflag.h" |
10 | 11 |
11 // Exit the entire program (like C exit) | 12 // Exit the entire program (like C exit) |
12 TEXT runtime·exit(SB),7,$-4 | 13 TEXT runtime·exit(SB),NOSPLIT,$-4 |
13 MOVW 0(FP), R0 // arg 1 exit status | 14 MOVW 0(FP), R0 // arg 1 exit status |
14 SWI $0xa00001 | 15 SWI $0xa00001 |
15 MOVW.CS $0, R8 // crash on syscall failure | 16 MOVW.CS $0, R8 // crash on syscall failure |
16 MOVW.CS R8, (R8) | 17 MOVW.CS R8, (R8) |
17 RET | 18 RET |
18 | 19 |
19 TEXT runtime·exit1(SB),7,$-4 | 20 TEXT runtime·exit1(SB),NOSPLIT,$-4 |
20 SWI $0xa00136 // sys__lwp_exit | 21 SWI $0xa00136 // sys__lwp_exit |
21 MOVW $1, R8 // crash | 22 MOVW $1, R8 // crash |
22 MOVW R8, (R8) | 23 MOVW R8, (R8) |
23 RET | 24 RET |
24 ········ | 25 ········ |
25 TEXT runtime·open(SB),7,$-8 | 26 TEXT runtime·open(SB),NOSPLIT,$-8 |
26 MOVW 0(FP), R0 | 27 MOVW 0(FP), R0 |
27 MOVW 4(FP), R1 | 28 MOVW 4(FP), R1 |
28 MOVW 8(FP), R2 | 29 MOVW 8(FP), R2 |
29 SWI $0xa00005 | 30 SWI $0xa00005 |
30 RET | 31 RET |
31 | 32 |
32 TEXT runtime·close(SB),7,$-8 | 33 TEXT runtime·close(SB),NOSPLIT,$-8 |
33 MOVW 0(FP), R0 | 34 MOVW 0(FP), R0 |
34 SWI $0xa00006 | 35 SWI $0xa00006 |
35 RET | 36 RET |
36 | 37 |
37 TEXT runtime·read(SB),7,$-8 | 38 TEXT runtime·read(SB),NOSPLIT,$-8 |
38 MOVW 0(FP), R0 | 39 MOVW 0(FP), R0 |
39 MOVW 4(FP), R1 | 40 MOVW 4(FP), R1 |
40 MOVW 8(FP), R2 | 41 MOVW 8(FP), R2 |
41 SWI $0xa00003 | 42 SWI $0xa00003 |
42 RET | 43 RET |
43 | 44 |
44 TEXT runtime·write(SB),7,$-4 | 45 TEXT runtime·write(SB),NOSPLIT,$-4 |
45 MOVW 0(FP), R0 // arg 1 - fd | 46 MOVW 0(FP), R0 // arg 1 - fd |
46 MOVW 4(FP), R1 // arg 2 - buf | 47 MOVW 4(FP), R1 // arg 2 - buf |
47 MOVW 8(FP), R2 // arg 3 - nbyte | 48 MOVW 8(FP), R2 // arg 3 - nbyte |
48 SWI $0xa00004 // sys_write | 49 SWI $0xa00004 // sys_write |
49 RET | 50 RET |
50 | 51 |
51 // int32 lwp_create(void *context, uintptr flags, void *lwpid) | 52 // int32 lwp_create(void *context, uintptr flags, void *lwpid) |
52 TEXT runtime·lwp_create(SB),7,$0 | 53 TEXT runtime·lwp_create(SB),NOSPLIT,$0 |
53 MOVW context+0(FP), R0 | 54 MOVW context+0(FP), R0 |
54 MOVW flags+4(FP), R1 | 55 MOVW flags+4(FP), R1 |
55 MOVW lwpid+8(FP), R2 | 56 MOVW lwpid+8(FP), R2 |
56 SWI $0xa00135 // sys__lwp_create | 57 SWI $0xa00135 // sys__lwp_create |
57 RET | 58 RET |
58 | 59 |
59 TEXT runtime·osyield(SB),7,$0 | 60 TEXT runtime·osyield(SB),NOSPLIT,$0 |
60 SWI $0xa0015e // sys_sched_yield | 61 SWI $0xa0015e // sys_sched_yield |
61 RET | 62 RET |
62 | 63 |
63 TEXT runtime·lwp_park(SB),7,$0 | 64 TEXT runtime·lwp_park(SB),NOSPLIT,$0 |
64 MOVW 0(FP), R0 // arg 1 - abstime | 65 MOVW 0(FP), R0 // arg 1 - abstime |
65 MOVW 4(FP), R1 // arg 2 - unpark | 66 MOVW 4(FP), R1 // arg 2 - unpark |
66 MOVW 8(FP), R2 // arg 3 - hint | 67 MOVW 8(FP), R2 // arg 3 - hint |
67 MOVW 12(FP), R3 // arg 4 - unparkhint | 68 MOVW 12(FP), R3 // arg 4 - unparkhint |
68 SWI $0xa001b2 // sys__lwp_park | 69 SWI $0xa001b2 // sys__lwp_park |
69 RET | 70 RET |
70 | 71 |
71 TEXT runtime·lwp_unpark(SB),7,$0 | 72 TEXT runtime·lwp_unpark(SB),NOSPLIT,$0 |
72 MOVW 0(FP), R0 // arg 1 - lwp | 73 MOVW 0(FP), R0 // arg 1 - lwp |
73 MOVW 4(FP), R1 // arg 2 - hint | 74 MOVW 4(FP), R1 // arg 2 - hint |
74 SWI $0xa00141 // sys__lwp_unpark | 75 SWI $0xa00141 // sys__lwp_unpark |
75 RET | 76 RET |
76 | 77 |
77 TEXT runtime·lwp_self(SB),7,$0 | 78 TEXT runtime·lwp_self(SB),NOSPLIT,$0 |
78 SWI $0xa00137 // sys__lwp_self | 79 SWI $0xa00137 // sys__lwp_self |
79 RET | 80 RET |
80 | 81 |
81 TEXT runtime·lwp_tramp(SB),7,$0 | 82 TEXT runtime·lwp_tramp(SB),NOSPLIT,$0 |
82 MOVW R0, m | 83 MOVW R0, m |
83 MOVW R1, g | 84 MOVW R1, g |
84 | 85 |
85 BL runtime·emptyfunc(SB) // fault if stack check is wrong | 86 BL runtime·emptyfunc(SB) // fault if stack check is wrong |
86 BL (R2) | 87 BL (R2) |
87 MOVW $2, R8 // crash (not reached) | 88 MOVW $2, R8 // crash (not reached) |
88 MOVW R8, (R8) | 89 MOVW R8, (R8) |
89 RET | 90 RET |
90 | 91 |
91 TEXT runtime·usleep(SB),7,$16 | 92 TEXT runtime·usleep(SB),NOSPLIT,$16 |
92 MOVW usec+0(FP), R0 | 93 MOVW usec+0(FP), R0 |
93 MOVW R0, R2 | 94 MOVW R0, R2 |
94 MOVW $1000000, R1 | 95 MOVW $1000000, R1 |
95 DIV R1, R0 | 96 DIV R1, R0 |
96 // 0(R13) is the saved LR, don't use it | 97 // 0(R13) is the saved LR, don't use it |
97 MOVW R0, 4(R13) // tv_sec.low | 98 MOVW R0, 4(R13) // tv_sec.low |
98 MOVW $0, R0 | 99 MOVW $0, R0 |
99 MOVW R0, 8(R13) // tv_sec.high | 100 MOVW R0, 8(R13) // tv_sec.high |
100 MOD R1, R2 | 101 MOD R1, R2 |
101 MOVW $1000, R1 | 102 MOVW $1000, R1 |
102 MUL R1, R2 | 103 MUL R1, R2 |
103 MOVW R2, 12(R13) // tv_nsec | 104 MOVW R2, 12(R13) // tv_nsec |
104 | 105 |
105 MOVW $4(R13), R0 // arg 1 - rqtp | 106 MOVW $4(R13), R0 // arg 1 - rqtp |
106 MOVW $0, R1 // arg 2 - rmtp | 107 MOVW $0, R1 // arg 2 - rmtp |
107 SWI $0xa001ae // sys_nanosleep | 108 SWI $0xa001ae // sys_nanosleep |
108 RET | 109 RET |
109 | 110 |
110 TEXT runtime·raise(SB),7,$16 | 111 TEXT runtime·raise(SB),NOSPLIT,$16 |
111 SWI $0xa00137 // sys__lwp_self, the returned R0 is arg 1 | 112 SWI $0xa00137 // sys__lwp_self, the returned R0 is arg 1 |
112 MOVW sig+0(FP), R1 // arg 2 - signal | 113 MOVW sig+0(FP), R1 // arg 2 - signal |
113 SWI $0xa0013e // sys__lwp_kill | 114 SWI $0xa0013e // sys__lwp_kill |
114 RET | 115 RET |
115 | 116 |
116 TEXT runtime·setitimer(SB),7,$-4 | 117 TEXT runtime·setitimer(SB),NOSPLIT,$-4 |
117 MOVW 0(FP), R0 // arg 1 - which | 118 MOVW 0(FP), R0 // arg 1 - which |
118 MOVW 4(FP), R1 // arg 2 - itv | 119 MOVW 4(FP), R1 // arg 2 - itv |
119 MOVW 8(FP), R2 // arg 3 - oitv | 120 MOVW 8(FP), R2 // arg 3 - oitv |
120 SWI $0xa001a9 // sys_setitimer | 121 SWI $0xa001a9 // sys_setitimer |
121 RET | 122 RET |
122 | 123 |
123 // func now() (sec int64, nsec int32) | 124 // func now() (sec int64, nsec int32) |
124 TEXT time·now(SB), 7, $32 | 125 TEXT time·now(SB), NOSPLIT, $32 |
125 MOVW $0, R0 // CLOCK_REALTIME | 126 MOVW $0, R0 // CLOCK_REALTIME |
126 MOVW $8(R13), R1 | 127 MOVW $8(R13), R1 |
127 SWI $0xa001ab // clock_gettime | 128 SWI $0xa001ab // clock_gettime |
128 | 129 |
129 MOVW 8(R13), R0 // sec.low | 130 MOVW 8(R13), R0 // sec.low |
130 MOVW 12(R13), R1 // sec.high | 131 MOVW 12(R13), R1 // sec.high |
131 MOVW 16(R13), R2 // nsec | 132 MOVW 16(R13), R2 // nsec |
132 | 133 |
133 MOVW R0, 0(FP) | 134 MOVW R0, 0(FP) |
134 MOVW R1, 4(FP) | 135 MOVW R1, 4(FP) |
135 MOVW R2, 8(FP) | 136 MOVW R2, 8(FP) |
136 RET | 137 RET |
137 | 138 |
138 // int64 nanotime(void) so really | 139 // int64 nanotime(void) so really |
139 // void nanotime(int64 *nsec) | 140 // void nanotime(int64 *nsec) |
140 TEXT runtime·nanotime(SB), 7, $32 | 141 TEXT runtime·nanotime(SB), NOSPLIT, $32 |
141 MOVW $0, R0 // CLOCK_REALTIME | 142 MOVW $0, R0 // CLOCK_REALTIME |
142 MOVW $8(R13), R1 | 143 MOVW $8(R13), R1 |
143 SWI $0xa001ab // clock_gettime | 144 SWI $0xa001ab // clock_gettime |
144 | 145 |
145 MOVW 8(R13), R0 // sec.low | 146 MOVW 8(R13), R0 // sec.low |
146 MOVW 12(R13), R4 // sec.high | 147 MOVW 12(R13), R4 // sec.high |
147 MOVW 16(R13), R2 // nsec | 148 MOVW 16(R13), R2 // nsec |
148 | 149 |
149 MOVW $1000000000, R3 | 150 MOVW $1000000000, R3 |
150 MULLU R0, R3, (R1, R0) | 151 MULLU R0, R3, (R1, R0) |
151 MUL R3, R4 | 152 MUL R3, R4 |
152 ADD.S R2, R0 | 153 ADD.S R2, R0 |
153 ADC R4, R1 | 154 ADC R4, R1 |
154 | 155 |
155 MOVW 0(FP), R3 | 156 MOVW 0(FP), R3 |
156 MOVW R0, 0(R3) | 157 MOVW R0, 0(R3) |
157 MOVW R1, 4(R3) | 158 MOVW R1, 4(R3) |
158 RET | 159 RET |
159 | 160 |
160 TEXT runtime·getcontext(SB),7,$-4 | 161 TEXT runtime·getcontext(SB),NOSPLIT,$-4 |
161 MOVW 0(FP), R0 // arg 1 - context | 162 MOVW 0(FP), R0 // arg 1 - context |
162 SWI $0xa00133 // sys_getcontext | 163 SWI $0xa00133 // sys_getcontext |
163 MOVW.CS $0, R8 // crash on syscall failure | 164 MOVW.CS $0, R8 // crash on syscall failure |
164 MOVW.CS R8, (R8) | 165 MOVW.CS R8, (R8) |
165 RET | 166 RET |
166 | 167 |
167 TEXT runtime·sigprocmask(SB),7,$0 | 168 TEXT runtime·sigprocmask(SB),NOSPLIT,$0 |
168 MOVW 0(FP), R0 // arg 1 - how | 169 MOVW 0(FP), R0 // arg 1 - how |
169 MOVW 4(FP), R1 // arg 2 - set | 170 MOVW 4(FP), R1 // arg 2 - set |
170 MOVW 8(FP), R2 // arg 3 - oset | 171 MOVW 8(FP), R2 // arg 3 - oset |
171 SWI $0xa00125 // sys_sigprocmask | 172 SWI $0xa00125 // sys_sigprocmask |
172 MOVW.CS $0, R8 // crash on syscall failure | 173 MOVW.CS $0, R8 // crash on syscall failure |
173 MOVW.CS R8, (R8) | 174 MOVW.CS R8, (R8) |
174 RET | 175 RET |
175 | 176 |
176 TEXT runtime·sigreturn_tramp(SB),7,$-4 | 177 TEXT runtime·sigreturn_tramp(SB),NOSPLIT,$-4 |
177 // on entry, SP points to siginfo, we add sizeof(ucontext) | 178 // on entry, SP points to siginfo, we add sizeof(ucontext) |
178 // to SP to get a pointer to ucontext. | 179 // to SP to get a pointer to ucontext. |
179 ADD $0x80, R13, R0 // 0x80 == sizeof(UcontextT) | 180 ADD $0x80, R13, R0 // 0x80 == sizeof(UcontextT) |
180 SWI $0xa00134 // sys_setcontext | 181 SWI $0xa00134 // sys_setcontext |
181 // something failed, we have to exit | 182 // something failed, we have to exit |
182 MOVW $0x4242, R0 // magic return number | 183 MOVW $0x4242, R0 // magic return number |
183 SWI $0xa00001 // sys_exit | 184 SWI $0xa00001 // sys_exit |
184 B -2(PC) // continue exit | 185 B -2(PC) // continue exit |
185 | 186 |
186 TEXT runtime·sigaction(SB),7,$4 | 187 TEXT runtime·sigaction(SB),NOSPLIT,$4 |
187 MOVW 0(FP), R0 // arg 1 - signum | 188 MOVW 0(FP), R0 // arg 1 - signum |
188 MOVW 4(FP), R1 // arg 2 - nsa | 189 MOVW 4(FP), R1 // arg 2 - nsa |
189 MOVW 8(FP), R2 // arg 3 - osa | 190 MOVW 8(FP), R2 // arg 3 - osa |
190 MOVW $runtime·sigreturn_tramp(SB), R3 // arg 4 - tramp | 191 MOVW $runtime·sigreturn_tramp(SB), R3 // arg 4 - tramp |
191 MOVW $2, R4 // arg 5 - vers | 192 MOVW $2, R4 // arg 5 - vers |
192 MOVW R4, 4(R13) | 193 MOVW R4, 4(R13) |
193 ADD $4, R13 // pass arg 5 on stack | 194 ADD $4, R13 // pass arg 5 on stack |
194 SWI $0xa00154 // sys___sigaction_sigtramp | 195 SWI $0xa00154 // sys___sigaction_sigtramp |
195 SUB $4, R13 | 196 SUB $4, R13 |
196 MOVW.CS $3, R8 // crash on syscall failure | 197 MOVW.CS $3, R8 // crash on syscall failure |
197 MOVW.CS R8, (R8) | 198 MOVW.CS R8, (R8) |
198 RET | 199 RET |
199 | 200 |
200 TEXT runtime·sigtramp(SB),7,$24 | 201 TEXT runtime·sigtramp(SB),NOSPLIT,$24 |
201 // this might be called in external code context, | 202 // this might be called in external code context, |
202 // where g and m are not set. | 203 // where g and m are not set. |
203 // first save R0, because _cgo_load_gm will clobber it | 204 // first save R0, because _cgo_load_gm will clobber it |
204 MOVW R0, 4(R13) // signum | 205 MOVW R0, 4(R13) // signum |
205 MOVW _cgo_load_gm(SB), R0 | 206 MOVW _cgo_load_gm(SB), R0 |
206 CMP $0, R0 | 207 CMP $0, R0 |
207 BL.NE (R0) | 208 BL.NE (R0) |
208 | 209 |
209 CMP $0, m | 210 CMP $0, m |
210 BNE 4(PC) | 211 BNE 4(PC) |
(...skipping 13 matching lines...) Expand all Loading... |
224 MOVW R1, 8(R13) // info | 225 MOVW R1, 8(R13) // info |
225 MOVW R2, 12(R13) // context | 226 MOVW R2, 12(R13) // context |
226 MOVW R4, 16(R13) // gp | 227 MOVW R4, 16(R13) // gp |
227 | 228 |
228 BL runtime·sighandler(SB) | 229 BL runtime·sighandler(SB) |
229 | 230 |
230 // restore g | 231 // restore g |
231 MOVW 20(R13), g | 232 MOVW 20(R13), g |
232 RET | 233 RET |
233 | 234 |
234 TEXT runtime·mmap(SB),7,$12 | 235 TEXT runtime·mmap(SB),NOSPLIT,$12 |
235 MOVW 0(FP), R0 // arg 1 - addr | 236 MOVW 0(FP), R0 // arg 1 - addr |
236 MOVW 4(FP), R1 // arg 2 - len | 237 MOVW 4(FP), R1 // arg 2 - len |
237 MOVW 8(FP), R2 // arg 3 - prot | 238 MOVW 8(FP), R2 // arg 3 - prot |
238 MOVW 12(FP), R3 // arg 4 - flags | 239 MOVW 12(FP), R3 // arg 4 - flags |
239 // arg 5 (fid) and arg6 (offset_lo, offset_hi) are passed on stack | 240 // arg 5 (fid) and arg6 (offset_lo, offset_hi) are passed on stack |
240 // note the C runtime only passes the 32-bit offset_lo to us | 241 // note the C runtime only passes the 32-bit offset_lo to us |
241 MOVW 16(FP), R4 // arg 5 | 242 MOVW 16(FP), R4 // arg 5 |
242 MOVW R4, 4(R13) | 243 MOVW R4, 4(R13) |
243 MOVW 20(FP), R5 // arg 6 lower 32-bit | 244 MOVW 20(FP), R5 // arg 6 lower 32-bit |
244 MOVW R5, 8(R13) | 245 MOVW R5, 8(R13) |
245 MOVW $0, R6 // higher 32-bit for arg 6 | 246 MOVW $0, R6 // higher 32-bit for arg 6 |
246 MOVW R6, 12(R13) | 247 MOVW R6, 12(R13) |
247 ADD $4, R13 // pass arg 5 and arg 6 on stack | 248 ADD $4, R13 // pass arg 5 and arg 6 on stack |
248 SWI $0xa000c5 // sys_mmap | 249 SWI $0xa000c5 // sys_mmap |
249 SUB $4, R13 | 250 SUB $4, R13 |
250 RET | 251 RET |
251 | 252 |
252 TEXT runtime·munmap(SB),7,$0 | 253 TEXT runtime·munmap(SB),NOSPLIT,$0 |
253 MOVW 0(FP), R0 // arg 1 - addr | 254 MOVW 0(FP), R0 // arg 1 - addr |
254 MOVW 4(FP), R1 // arg 2 - len | 255 MOVW 4(FP), R1 // arg 2 - len |
255 SWI $0xa00049 // sys_munmap | 256 SWI $0xa00049 // sys_munmap |
256 MOVW.CS $0, R8 // crash on syscall failure | 257 MOVW.CS $0, R8 // crash on syscall failure |
257 MOVW.CS R8, (R8) | 258 MOVW.CS R8, (R8) |
258 RET | 259 RET |
259 | 260 |
260 TEXT runtime·madvise(SB),7,$0 | 261 TEXT runtime·madvise(SB),NOSPLIT,$0 |
261 MOVW 0(FP), R0 // arg 1 - addr | 262 MOVW 0(FP), R0 // arg 1 - addr |
262 MOVW 4(FP), R1 // arg 2 - len | 263 MOVW 4(FP), R1 // arg 2 - len |
263 MOVW 8(FP), R2 // arg 3 - behav | 264 MOVW 8(FP), R2 // arg 3 - behav |
264 SWI $0xa0004b // sys_madvise | 265 SWI $0xa0004b // sys_madvise |
265 // ignore failure - maybe pages are locked | 266 // ignore failure - maybe pages are locked |
266 RET | 267 RET |
267 | 268 |
268 TEXT runtime·sigaltstack(SB),7,$-4 | 269 TEXT runtime·sigaltstack(SB),NOSPLIT,$-4 |
269 MOVW 0(FP), R0 // arg 1 - nss | 270 MOVW 0(FP), R0 // arg 1 - nss |
270 MOVW 4(FP), R1 // arg 2 - oss | 271 MOVW 4(FP), R1 // arg 2 - oss |
271 SWI $0xa00119 // sys___sigaltstack14 | 272 SWI $0xa00119 // sys___sigaltstack14 |
272 MOVW.CS $0, R8 // crash on syscall failure | 273 MOVW.CS $0, R8 // crash on syscall failure |
273 MOVW.CS R8, (R8) | 274 MOVW.CS R8, (R8) |
274 RET | 275 RET |
275 | 276 |
276 TEXT runtime·sysctl(SB),7,$8 | 277 TEXT runtime·sysctl(SB),NOSPLIT,$8 |
277 MOVW 0(FP), R0 // arg 1 - name | 278 MOVW 0(FP), R0 // arg 1 - name |
278 MOVW 4(FP), R1 // arg 2 - namelen | 279 MOVW 4(FP), R1 // arg 2 - namelen |
279 MOVW 8(FP), R2 // arg 3 - oldp | 280 MOVW 8(FP), R2 // arg 3 - oldp |
280 MOVW 12(FP), R3 // arg 4 - oldlenp | 281 MOVW 12(FP), R3 // arg 4 - oldlenp |
281 MOVW 16(FP), R4 // arg 5 - newp | 282 MOVW 16(FP), R4 // arg 5 - newp |
282 MOVW R4, 4(R13) | 283 MOVW R4, 4(R13) |
283 MOVW 20(FP), R4 // arg 6 - newlen | 284 MOVW 20(FP), R4 // arg 6 - newlen |
284 MOVW R4, 8(R13) | 285 MOVW R4, 8(R13) |
285 ADD $4, R13 // pass arg 5 and 6 on stack | 286 ADD $4, R13 // pass arg 5 and 6 on stack |
286 SWI $0xa000ca // sys___sysctl | 287 SWI $0xa000ca // sys___sysctl |
287 SUB $4, R13 | 288 SUB $4, R13 |
288 RET | 289 RET |
289 | 290 |
290 TEXT runtime·casp(SB),7,$0 | 291 TEXT runtime·casp(SB),NOSPLIT,$0 |
291 B runtime·cas(SB) | 292 B runtime·cas(SB) |
292 | 293 |
293 // TODO(minux): this is only valid for ARMv6+ | 294 // TODO(minux): this is only valid for ARMv6+ |
294 // bool armcas(int32 *val, int32 old, int32 new) | 295 // bool armcas(int32 *val, int32 old, int32 new) |
295 // Atomically: | 296 // Atomically: |
296 // if(*val == old){ | 297 // if(*val == old){ |
297 // *val = new; | 298 // *val = new; |
298 // return 1; | 299 // return 1; |
299 // }else | 300 // }else |
300 // return 0; | 301 // return 0; |
301 TEXT runtime·cas(SB),7,$0 | 302 TEXT runtime·cas(SB),NOSPLIT,$0 |
302 B runtime·armcas(SB) | 303 B runtime·armcas(SB) |
LEFT | RIGHT |