Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2235)

Delta Between Two Patch Sets: src/pkg/runtime/sys_netbsd_arm.s

Issue 12613044: code review 12613044: runtime: convert .s textflags from numbers to symbolic ... (Closed)
Left Patch Set: Created 11 years, 7 months ago
Right Patch Set: diff -r 06da2934c103 https://khr%40golang.org@code.google.com/p/go/ Created 11 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/runtime/sys_netbsd_amd64.s ('k') | src/pkg/runtime/sys_openbsd_386.s » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(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
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)
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b