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

Side by Side Diff: src/pkg/runtime/sys_linux_arm.s

Issue 135830043: code review 135830043: cmd/cc, runtime: convert C compilers to use Go calling ... (Closed)
Patch Set: diff -r 9fafd63bc3c564070ce477ebaba1545f4a11b58f https://code.google.com/p/go/ Created 10 years, 6 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:
View unified diff | Download patch
« no previous file with comments | « src/pkg/runtime/sys_linux_amd64.s ('k') | src/pkg/runtime/sys_nacl_386.s » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2009 The Go Authors. All rights reserved. 1 // Copyright 2009 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 // 5 //
6 // System calls and other sys.stuff for arm, Linux 6 // System calls and other sys.stuff for arm, Linux
7 // 7 //
8 8
9 #include "zasm_GOOS_GOARCH.h" 9 #include "zasm_GOOS_GOARCH.h"
10 #include "../../cmd/ld/textflag.h" 10 #include "../../cmd/ld/textflag.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #define SYS_fcntl (SYS_BASE + 55) 44 #define SYS_fcntl (SYS_BASE + 55)
45 45
46 #define ARM_BASE (SYS_BASE + 0x0f0000) 46 #define ARM_BASE (SYS_BASE + 0x0f0000)
47 47
48 TEXT runtime·open(SB),NOSPLIT,$0 48 TEXT runtime·open(SB),NOSPLIT,$0
49 MOVW 0(FP), R0 49 MOVW 0(FP), R0
50 MOVW 4(FP), R1 50 MOVW 4(FP), R1
51 MOVW 8(FP), R2 51 MOVW 8(FP), R2
52 MOVW $SYS_open, R7 52 MOVW $SYS_open, R7
53 SWI $0 53 SWI $0
54 MOVW R0, ret+12(FP)
54 RET 55 RET
55 56
56 TEXT runtime·close(SB),NOSPLIT,$0 57 TEXT runtime·close(SB),NOSPLIT,$0
57 MOVW 0(FP), R0 58 MOVW 0(FP), R0
58 MOVW $SYS_close, R7 59 MOVW $SYS_close, R7
59 SWI $0 60 SWI $0
61 MOVW R0, ret+4(FP)
60 RET 62 RET
61 63
62 TEXT runtime·write(SB),NOSPLIT,$0 64 TEXT runtime·write(SB),NOSPLIT,$0
63 MOVW 0(FP), R0 65 MOVW 0(FP), R0
64 MOVW 4(FP), R1 66 MOVW 4(FP), R1
65 MOVW 8(FP), R2 67 MOVW 8(FP), R2
66 MOVW $SYS_write, R7 68 MOVW $SYS_write, R7
67 SWI $0 69 SWI $0
70 MOVW R0, ret+12(FP)
68 RET 71 RET
69 72
70 TEXT runtime·read(SB),NOSPLIT,$0 73 TEXT runtime·read(SB),NOSPLIT,$0
71 MOVW 0(FP), R0 74 MOVW 0(FP), R0
72 MOVW 4(FP), R1 75 MOVW 4(FP), R1
73 MOVW 8(FP), R2 76 MOVW 8(FP), R2
74 MOVW $SYS_read, R7 77 MOVW $SYS_read, R7
75 SWI $0 78 SWI $0
79 MOVW R0, ret+12(FP)
76 RET 80 RET
77 81
78 TEXT runtime·getrlimit(SB),NOSPLIT,$0 82 TEXT runtime·getrlimit(SB),NOSPLIT,$0
79 MOVW 0(FP), R0 83 MOVW 0(FP), R0
80 MOVW 4(FP), R1 84 MOVW 4(FP), R1
81 MOVW $SYS_ugetrlimit, R7 85 MOVW $SYS_ugetrlimit, R7
82 SWI $0 86 SWI $0
87 MOVW R0, ret+8(FP)
83 RET 88 RET
84 89
85 TEXT runtime·exit(SB),NOSPLIT,$-4 90 TEXT runtime·exit(SB),NOSPLIT,$-4
86 MOVW 0(FP), R0 91 MOVW 0(FP), R0
87 MOVW $SYS_exit_group, R7 92 MOVW $SYS_exit_group, R7
88 SWI $0 93 SWI $0
89 MOVW $1234, R0 94 MOVW $1234, R0
90 MOVW $1002, R1 95 MOVW $1002, R1
91 MOVW R0, (R1) // fail hard 96 MOVW R0, (R1) // fail hard
92 97
(...skipping 19 matching lines...) Expand all
112 MOVW 4(FP), R1 117 MOVW 4(FP), R1
113 MOVW 8(FP), R2 118 MOVW 8(FP), R2
114 MOVW 12(FP), R3 119 MOVW 12(FP), R3
115 MOVW 16(FP), R4 120 MOVW 16(FP), R4
116 MOVW 20(FP), R5 121 MOVW 20(FP), R5
117 MOVW $SYS_mmap2, R7 122 MOVW $SYS_mmap2, R7
118 SWI $0 123 SWI $0
119 MOVW $0xfffff001, R6 124 MOVW $0xfffff001, R6
120 CMP R6, R0 125 CMP R6, R0
121 RSB.HI $0, R0 126 RSB.HI $0, R0
127 MOVW R0, ret+24(FP)
122 RET 128 RET
123 129
124 TEXT runtime·munmap(SB),NOSPLIT,$0 130 TEXT runtime·munmap(SB),NOSPLIT,$0
125 MOVW 0(FP), R0 131 MOVW 0(FP), R0
126 MOVW 4(FP), R1 132 MOVW 4(FP), R1
127 MOVW $SYS_munmap, R7 133 MOVW $SYS_munmap, R7
128 SWI $0 134 SWI $0
129 MOVW $0xfffff001, R6 135 MOVW $0xfffff001, R6
130 CMP R6, R0 136 CMP R6, R0
131 MOVW.HI $0, R8 // crash on syscall failure 137 MOVW.HI $0, R8 // crash on syscall failure
(...skipping 16 matching lines...) Expand all
148 MOVW $SYS_setitimer, R7 154 MOVW $SYS_setitimer, R7
149 SWI $0 155 SWI $0
150 RET 156 RET
151 157
152 TEXT runtime·mincore(SB),NOSPLIT,$0 158 TEXT runtime·mincore(SB),NOSPLIT,$0
153 MOVW 0(FP), R0 159 MOVW 0(FP), R0
154 MOVW 4(FP), R1 160 MOVW 4(FP), R1
155 MOVW 8(FP), R2 161 MOVW 8(FP), R2
156 MOVW $SYS_mincore, R7 162 MOVW $SYS_mincore, R7
157 SWI $0 163 SWI $0
164 MOVW R0, ret+12(FP)
158 RET 165 RET
159 166
160 TEXT time·now(SB), NOSPLIT, $32 167 TEXT time·now(SB), NOSPLIT, $32
161 MOVW $0, R0 // CLOCK_REALTIME 168 MOVW $0, R0 // CLOCK_REALTIME
162 MOVW $8(R13), R1 // timespec 169 MOVW $8(R13), R1 // timespec
163 MOVW $SYS_clock_gettime, R7 170 MOVW $SYS_clock_gettime, R7
164 SWI $0 171 SWI $0
165 ········ 172 ········
166 MOVW 8(R13), R0 // sec 173 MOVW 8(R13), R0 // sec
167 MOVW 12(R13), R2 // nsec 174 MOVW 12(R13), R2 // nsec
168 ········ 175 ········
169 MOVW R0, 0(FP) 176 MOVW R0, 0(FP)
170 MOVW $0, R1 177 MOVW $0, R1
171 MOVW R1, 4(FP) 178 MOVW R1, 4(FP)
172 MOVW R2, 8(FP) 179 MOVW R2, 8(FP)
173 RET····· 180 RET·····
174 181
175 // int64 nanotime(void) so really 182 // int64 nanotime(void)
176 // void nanotime(int64 *nsec)
177 TEXT runtime·nanotime(SB),NOSPLIT,$32 183 TEXT runtime·nanotime(SB),NOSPLIT,$32
178 MOVW $1, R0 // CLOCK_MONOTONIC 184 MOVW $1, R0 // CLOCK_MONOTONIC
179 MOVW $8(R13), R1 // timespec 185 MOVW $8(R13), R1 // timespec
180 MOVW $SYS_clock_gettime, R7 186 MOVW $SYS_clock_gettime, R7
181 SWI $0 187 SWI $0
182 ········ 188 ········
183 MOVW 8(R13), R0 // sec 189 MOVW 8(R13), R0 // sec
184 MOVW 12(R13), R2 // nsec 190 MOVW 12(R13), R2 // nsec
185 ········ 191 ········
186 MOVW $1000000000, R3 192 MOVW $1000000000, R3
187 MULLU R0, R3, (R1, R0) 193 MULLU R0, R3, (R1, R0)
188 MOVW $0, R4 194 MOVW $0, R4
189 ADD.S R2, R0 195 ADD.S R2, R0
190 ADC R4, R1 196 ADC R4, R1
191 197
192 » MOVW» 0(FP), R3 198 » MOVW» R0, ret_lo+0(FP)
193 » MOVW» R0, 0(R3) 199 » MOVW» R1, ret_hi+4(FP)
194 » MOVW» R1, 4(R3)
195 RET 200 RET
196 201
197 // int32 futex(int32 *uaddr, int32 op, int32 val, 202 // int32 futex(int32 *uaddr, int32 op, int32 val,
198 // struct timespec *timeout, int32 *uaddr2, int32 val2); 203 // struct timespec *timeout, int32 *uaddr2, int32 val2);
199 TEXT runtime·futex(SB),NOSPLIT,$0 204 TEXT runtime·futex(SB),NOSPLIT,$0
200 MOVW 4(SP), R0 205 MOVW 4(SP), R0
201 MOVW 8(SP), R1 206 MOVW 8(SP), R1
202 MOVW 12(SP), R2 207 MOVW 12(SP), R2
203 MOVW 16(SP), R3 208 MOVW 16(SP), R3
204 MOVW 20(SP), R4 209 MOVW 20(SP), R4
205 MOVW 24(SP), R5 210 MOVW 24(SP), R5
206 MOVW $SYS_futex, R7 211 MOVW $SYS_futex, R7
207 SWI $0 212 SWI $0
213 MOVW R0, ret+24(FP)
208 RET 214 RET
209 215
210 216
211 // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); 217 // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void));
212 TEXT runtime·clone(SB),NOSPLIT,$0 218 TEXT runtime·clone(SB),NOSPLIT,$0
213 MOVW flags+0(FP), R0 219 MOVW flags+0(FP), R0
214 » MOVW» stack+4(FP), R1 220 » MOVW» stk+4(FP), R1
215 MOVW $0, R2 // parent tid ptr 221 MOVW $0, R2 // parent tid ptr
216 MOVW $0, R3 // tls_val 222 MOVW $0, R3 // tls_val
217 MOVW $0, R4 // child tid ptr 223 MOVW $0, R4 // child tid ptr
218 MOVW $0, R5 224 MOVW $0, R5
219 225
220 // Copy mp, gp, fn off parent stack for use by child. 226 // Copy mp, gp, fn off parent stack for use by child.
221 // TODO(kaib): figure out which registers are clobbered by clone and avo id stack copying 227 // TODO(kaib): figure out which registers are clobbered by clone and avo id stack copying
222 MOVW $-16(R1), R1 228 MOVW $-16(R1), R1
223 MOVW mm+8(FP), R6 229 MOVW mm+8(FP), R6
224 MOVW R6, 0(R1) 230 MOVW R6, 0(R1)
225 MOVW gg+12(FP), R6 231 MOVW gg+12(FP), R6
226 MOVW R6, 4(R1) 232 MOVW R6, 4(R1)
227 MOVW fn+16(FP), R6 233 MOVW fn+16(FP), R6
228 MOVW R6, 8(R1) 234 MOVW R6, 8(R1)
229 MOVW $1234, R6 235 MOVW $1234, R6
230 MOVW R6, 12(R1) 236 MOVW R6, 12(R1)
231 237
232 MOVW $SYS_clone, R7 238 MOVW $SYS_clone, R7
233 SWI $0 239 SWI $0
234 240
235 // In parent, return. 241 // In parent, return.
236 CMP $0, R0 242 CMP $0, R0
237 » BEQ» 2(PC) 243 » BEQ» 3(PC)
244 » MOVW» R0, ret+20(FP)
238 RET 245 RET
239 246
240 // Paranoia: check that SP is as we expect. Use R13 to avoid linker 'fix up' 247 // Paranoia: check that SP is as we expect. Use R13 to avoid linker 'fix up'
241 MOVW 12(R13), R0 248 MOVW 12(R13), R0
242 MOVW $1234, R1 249 MOVW $1234, R1
243 CMP R0, R1 250 CMP R0, R1
244 BEQ 2(PC) 251 BEQ 2(PC)
245 BL runtime·abort(SB) 252 BL runtime·abort(SB)
246 253
247 MOVW 4(R13), g 254 MOVW 4(R13), g
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 SWI $0 338 SWI $0
332 RET 339 RET
333 340
334 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0 341 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0
335 MOVW 0(FP), R0 342 MOVW 0(FP), R0
336 MOVW 4(FP), R1 343 MOVW 4(FP), R1
337 MOVW 8(FP), R2 344 MOVW 8(FP), R2
338 MOVW 12(FP), R3 345 MOVW 12(FP), R3
339 MOVW $SYS_rt_sigaction, R7 346 MOVW $SYS_rt_sigaction, R7
340 SWI $0 347 SWI $0
348 MOVW R0, ret+16(FP)
341 RET 349 RET
342 350
343 TEXT runtime·usleep(SB),NOSPLIT,$12 351 TEXT runtime·usleep(SB),NOSPLIT,$12
344 MOVW usec+0(FP), R0 352 MOVW usec+0(FP), R0
345 MOVW R0, R1 353 MOVW R0, R1
346 MOVW $1000000, R2 354 MOVW $1000000, R2
347 DIV R2, R0 355 DIV R2, R0
348 MOD R2, R1 356 MOD R2, R1
349 MOVW R0, 4(SP) 357 MOVW R0, 4(SP)
350 MOVW R1, 8(SP) 358 MOVW R1, 8(SP)
351 MOVW $0, R0 359 MOVW $0, R0
352 MOVW $0, R1 360 MOVW $0, R1
353 MOVW $0, R2 361 MOVW $0, R2
354 MOVW $0, R3 362 MOVW $0, R3
355 MOVW $4(SP), R4 363 MOVW $4(SP), R4
356 MOVW $SYS_select, R7 364 MOVW $SYS_select, R7
357 SWI $0 365 SWI $0
358 RET 366 RET
359 367
360 // Use kernel version instead of native armcas in asm_arm.s. 368 // Use kernel version instead of native armcas in asm_arm.s.
361 // See ../sync/atomic/asm_linux_arm.s for details. 369 // See ../sync/atomic/asm_linux_arm.s for details.
362 TEXT cas<>(SB),NOSPLIT,$0 370 TEXT cas<>(SB),NOSPLIT,$0
363 MOVW $0xffff0fc0, PC 371 MOVW $0xffff0fc0, PC
364 372
365 TEXT runtime·cas(SB),NOSPLIT,$0 373 TEXT runtime·cas(SB),NOSPLIT,$0
366 » MOVW» valptr+0(FP), R2 374 » MOVW» ptr+0(FP), R2
367 MOVW old+4(FP), R0 375 MOVW old+4(FP), R0
368 casagain: 376 casagain:
369 MOVW new+8(FP), R1 377 MOVW new+8(FP), R1
370 BL cas<>(SB) 378 BL cas<>(SB)
371 BCC cascheck 379 BCC cascheck
372 MOVW $1, R0 380 MOVW $1, R0
381 MOVB R0, ret+12(FP)
373 RET 382 RET
374 cascheck: 383 cascheck:
375 // Kernel lies; double-check. 384 // Kernel lies; double-check.
376 » MOVW» valptr+0(FP), R2 385 » MOVW» ptr+0(FP), R2
377 MOVW old+4(FP), R0 386 MOVW old+4(FP), R0
378 MOVW 0(R2), R3 387 MOVW 0(R2), R3
379 CMP R0, R3 388 CMP R0, R3
380 BEQ casagain 389 BEQ casagain
381 MOVW $0, R0 390 MOVW $0, R0
391 MOVB R0, ret+12(FP)
382 RET 392 RET
383 393
384 TEXT runtime·casp(SB),NOSPLIT,$0 394 TEXT runtime·casp(SB),NOSPLIT,$0
385 B runtime·cas(SB) 395 B runtime·cas(SB)
386 396
387 TEXT runtime·osyield(SB),NOSPLIT,$0 397 TEXT runtime·osyield(SB),NOSPLIT,$0
388 MOVW $SYS_sched_yield, R7 398 MOVW $SYS_sched_yield, R7
389 SWI $0 399 SWI $0
390 RET 400 RET
391 401
392 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0 402 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0
393 MOVW 0(FP), R0 403 MOVW 0(FP), R0
394 MOVW 4(FP), R1 404 MOVW 4(FP), R1
395 MOVW 8(FP), R2 405 MOVW 8(FP), R2
396 MOVW $SYS_sched_getaffinity, R7 406 MOVW $SYS_sched_getaffinity, R7
397 SWI $0 407 SWI $0
408 MOVW R0, ret+12(FP)
398 RET 409 RET
399 410
400 // int32 runtime·epollcreate(int32 size) 411 // int32 runtime·epollcreate(int32 size)
401 TEXT runtime·epollcreate(SB),NOSPLIT,$0 412 TEXT runtime·epollcreate(SB),NOSPLIT,$0
402 MOVW 0(FP), R0 413 MOVW 0(FP), R0
403 MOVW $SYS_epoll_create, R7 414 MOVW $SYS_epoll_create, R7
404 SWI $0 415 SWI $0
416 MOVW R0, ret+4(FP)
405 RET 417 RET
406 418
407 // int32 runtime·epollcreate1(int32 flags) 419 // int32 runtime·epollcreate1(int32 flags)
408 TEXT runtime·epollcreate1(SB),NOSPLIT,$0 420 TEXT runtime·epollcreate1(SB),NOSPLIT,$0
409 MOVW 0(FP), R0 421 MOVW 0(FP), R0
410 MOVW $SYS_epoll_create1, R7 422 MOVW $SYS_epoll_create1, R7
411 SWI $0 423 SWI $0
424 MOVW R0, ret+4(FP)
412 RET 425 RET
413 426
414 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev) 427 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev)
415 TEXT runtime·epollctl(SB),NOSPLIT,$0 428 TEXT runtime·epollctl(SB),NOSPLIT,$0
416 MOVW 0(FP), R0 429 MOVW 0(FP), R0
417 MOVW 4(FP), R1 430 MOVW 4(FP), R1
418 MOVW 8(FP), R2 431 MOVW 8(FP), R2
419 MOVW 12(FP), R3 432 MOVW 12(FP), R3
420 MOVW $SYS_epoll_ctl, R7 433 MOVW $SYS_epoll_ctl, R7
421 SWI $0 434 SWI $0
435 MOVW R0, ret+16(FP)
422 RET 436 RET
423 437
424 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout) 438 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout)
425 TEXT runtime·epollwait(SB),NOSPLIT,$0 439 TEXT runtime·epollwait(SB),NOSPLIT,$0
426 MOVW 0(FP), R0 440 MOVW 0(FP), R0
427 MOVW 4(FP), R1 441 MOVW 4(FP), R1
428 MOVW 8(FP), R2 442 MOVW 8(FP), R2
429 MOVW 12(FP), R3 443 MOVW 12(FP), R3
430 MOVW $SYS_epoll_wait, R7 444 MOVW $SYS_epoll_wait, R7
431 SWI $0 445 SWI $0
446 MOVW R0, ret+16(FP)
432 RET 447 RET
433 448
434 // void runtime·closeonexec(int32 fd) 449 // void runtime·closeonexec(int32 fd)
435 TEXT runtime·closeonexec(SB),NOSPLIT,$0 450 TEXT runtime·closeonexec(SB),NOSPLIT,$0
436 MOVW 0(FP), R0 // fd 451 MOVW 0(FP), R0 // fd
437 MOVW $2, R1 // F_SETFD 452 MOVW $2, R1 // F_SETFD
438 MOVW $1, R2 // FD_CLOEXEC 453 MOVW $1, R2 // FD_CLOEXEC
439 MOVW $SYS_fcntl, R7 454 MOVW $SYS_fcntl, R7
440 SWI $0 455 SWI $0
441 RET 456 RET
442 457
443 // b __kuser_get_tls @ 0xffff0fe0 458 // b __kuser_get_tls @ 0xffff0fe0
444 TEXT runtime·read_tls_fallback(SB),NOSPLIT,$-4 459 TEXT runtime·read_tls_fallback(SB),NOSPLIT,$-4
445 MOVW $0xffff0fe0, R0 460 MOVW $0xffff0fe0, R0
446 B (R0) 461 B (R0)
OLDNEW
« no previous file with comments | « src/pkg/runtime/sys_linux_amd64.s ('k') | src/pkg/runtime/sys_nacl_386.s » ('j') | no next file with comments »

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