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

Side by Side Diff: src/pkg/runtime/sys_linux_amd64.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_386.s ('k') | src/pkg/runtime/sys_linux_arm.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 AMD64, Linux 6 // System calls and other sys.stuff for AMD64, 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"
11 11
12 TEXT runtime·exit(SB),NOSPLIT,$0-8 12 TEXT runtime·exit(SB),NOSPLIT,$0-4
13 » MOVL» 8(SP), DI 13 » MOVL» code+0(FP), DI
14 MOVL $231, AX // exitgroup - force all os threads to exit 14 MOVL $231, AX // exitgroup - force all os threads to exit
15 SYSCALL 15 SYSCALL
16 RET 16 RET
17 17
18 TEXT runtime·exit1(SB),NOSPLIT,$0-8 18 TEXT runtime·exit1(SB),NOSPLIT,$0-4
19 » MOVL» 8(SP), DI 19 » MOVL» code+0(FP), DI
20 MOVL $60, AX // exit - exit the current os thread 20 MOVL $60, AX // exit - exit the current os thread
21 SYSCALL 21 SYSCALL
22 RET 22 RET
23 23
24 TEXT runtime·open(SB),NOSPLIT,$0-16 24 TEXT runtime·open(SB),NOSPLIT,$0-20
25 » MOVQ» 8(SP), DI 25 » MOVQ» name+0(FP), DI
26 » MOVL» 16(SP), SI 26 » MOVL» mode+8(FP), SI
27 » MOVL» 20(SP), DX 27 » MOVL» perm+12(FP), DX
28 MOVL $2, AX // syscall entry 28 MOVL $2, AX // syscall entry
29 SYSCALL 29 SYSCALL
30 MOVL AX, ret+16(FP)
30 RET 31 RET
31 32
32 TEXT runtime·close(SB),NOSPLIT,$0-16 33 TEXT runtime·close(SB),NOSPLIT,$0-12
33 » MOVL» 8(SP), DI 34 » MOVL» fd+0(FP), DI
34 MOVL $3, AX // syscall entry 35 MOVL $3, AX // syscall entry
35 SYSCALL 36 SYSCALL
37 MOVL AX, ret+8(FP)
36 RET 38 RET
37 39
38 TEXT runtime·write(SB),NOSPLIT,$0-24 40 TEXT runtime·write(SB),NOSPLIT,$0-28
39 » MOVL» 8(SP), DI 41 » MOVQ» fd+0(FP), DI
40 » MOVQ» 16(SP), SI 42 » MOVQ» p+8(FP), SI
41 » MOVL» 24(SP), DX 43 » MOVL» n+16(FP), DX
42 MOVL $1, AX // syscall entry 44 MOVL $1, AX // syscall entry
43 SYSCALL 45 SYSCALL
46 MOVL AX, ret+24(FP)
44 RET 47 RET
45 48
46 TEXT runtime·read(SB),NOSPLIT,$0-24 49 TEXT runtime·read(SB),NOSPLIT,$0-28
47 » MOVL» 8(SP), DI 50 » MOVL» fd+0(FP), DI
48 » MOVQ» 16(SP), SI 51 » MOVQ» p+8(FP), SI
49 » MOVL» 24(SP), DX 52 » MOVL» n+16(FP), DX
50 MOVL $0, AX // syscall entry 53 MOVL $0, AX // syscall entry
51 SYSCALL 54 SYSCALL
55 MOVL AX, ret+24(FP)
52 RET 56 RET
53 57
54 TEXT runtime·getrlimit(SB),NOSPLIT,$0-24 58 TEXT runtime·getrlimit(SB),NOSPLIT,$0-20
55 » MOVL» 8(SP), DI 59 » MOVL» kind+0(FP), DI
56 » MOVQ» 16(SP), SI 60 » MOVQ» limit+8(FP), SI
57 MOVL $97, AX // syscall entry 61 MOVL $97, AX // syscall entry
58 SYSCALL 62 SYSCALL
63 MOVL AX, ret+16(FP)
59 RET 64 RET
60 65
61 TEXT runtime·usleep(SB),NOSPLIT,$16 66 TEXT runtime·usleep(SB),NOSPLIT,$16
62 MOVL $0, DX 67 MOVL $0, DX
63 MOVL usec+0(FP), AX 68 MOVL usec+0(FP), AX
64 MOVL $1000000, CX 69 MOVL $1000000, CX
65 DIVL CX 70 DIVL CX
66 MOVQ AX, 0(SP) 71 MOVQ AX, 0(SP)
67 MOVQ DX, 8(SP) 72 MOVQ DX, 8(SP)
68 73
(...skipping 10 matching lines...) Expand all
79 TEXT runtime·raise(SB),NOSPLIT,$0 84 TEXT runtime·raise(SB),NOSPLIT,$0
80 MOVL $186, AX // syscall - gettid 85 MOVL $186, AX // syscall - gettid
81 SYSCALL 86 SYSCALL
82 MOVL AX, DI // arg 1 tid 87 MOVL AX, DI // arg 1 tid
83 MOVL sig+0(FP), SI // arg 2 88 MOVL sig+0(FP), SI // arg 2
84 MOVL $200, AX // syscall - tkill 89 MOVL $200, AX // syscall - tkill
85 SYSCALL 90 SYSCALL
86 RET 91 RET
87 92
88 TEXT runtime·setitimer(SB),NOSPLIT,$0-24 93 TEXT runtime·setitimer(SB),NOSPLIT,$0-24
89 » MOVL» 8(SP), DI 94 » MOVL» mode+0(FP), DI
90 » MOVQ» 16(SP), SI 95 » MOVQ» new+8(FP), SI
91 » MOVQ» 24(SP), DX 96 » MOVQ» old+16(FP), DX
92 MOVL $38, AX // syscall entry 97 MOVL $38, AX // syscall entry
93 SYSCALL 98 SYSCALL
94 RET 99 RET
95 100
96 TEXT runtime·mincore(SB),NOSPLIT,$0-24 101 TEXT runtime·mincore(SB),NOSPLIT,$0-28
97 » MOVQ» 8(SP), DI 102 » MOVQ» addr+0(FP), DI
98 » MOVQ» 16(SP), SI 103 » MOVQ» n+8(FP), SI
99 » MOVQ» 24(SP), DX 104 » MOVQ» dst+16(FP), DX
100 MOVL $27, AX // syscall entry 105 MOVL $27, AX // syscall entry
101 SYSCALL 106 SYSCALL
107 MOVL AX, ret+24(FP)
102 RET 108 RET
103 109
104 // func now() (sec int64, nsec int32) 110 // func now() (sec int64, nsec int32)
105 TEXT time·now(SB),NOSPLIT,$16 111 TEXT time·now(SB),NOSPLIT,$16
106 // Be careful. We're calling a function with gcc calling convention here . 112 // Be careful. We're calling a function with gcc calling convention here .
107 // We're guaranteed 128 bytes on entry, and we've taken 16, and the 113 // We're guaranteed 128 bytes on entry, and we've taken 16, and the
108 // call uses another 8. 114 // call uses another 8.
109 // That leaves 104 for the gettime code to use. Hope that's enough! 115 // That leaves 104 for the gettime code to use. Hope that's enough!
110 MOVQ runtime·__vdso_clock_gettime_sym(SB), AX 116 MOVQ runtime·__vdso_clock_gettime_sym(SB), AX
111 CMPQ AX, $0 117 CMPQ AX, $0
(...skipping 26 matching lines...) Expand all
138 JEQ fallback_gtod_nt 144 JEQ fallback_gtod_nt
139 MOVL $1, DI // CLOCK_MONOTONIC 145 MOVL $1, DI // CLOCK_MONOTONIC
140 LEAQ 0(SP), SI 146 LEAQ 0(SP), SI
141 CALL AX 147 CALL AX
142 MOVQ 0(SP), AX // sec 148 MOVQ 0(SP), AX // sec
143 MOVQ 8(SP), DX // nsec 149 MOVQ 8(SP), DX // nsec
144 // sec is in AX, nsec in DX 150 // sec is in AX, nsec in DX
145 // return nsec in AX 151 // return nsec in AX
146 IMULQ $1000000000, AX 152 IMULQ $1000000000, AX
147 ADDQ DX, AX 153 ADDQ DX, AX
154 MOVQ AX, ret+0(FP)
148 RET 155 RET
149 fallback_gtod_nt: 156 fallback_gtod_nt:
150 LEAQ 0(SP), DI 157 LEAQ 0(SP), DI
151 MOVQ $0, SI 158 MOVQ $0, SI
152 MOVQ runtime·__vdso_gettimeofday_sym(SB), AX 159 MOVQ runtime·__vdso_gettimeofday_sym(SB), AX
153 CALL AX 160 CALL AX
154 MOVQ 0(SP), AX // sec 161 MOVQ 0(SP), AX // sec
155 MOVL 8(SP), DX // usec 162 MOVL 8(SP), DX // usec
156 IMULQ $1000, DX 163 IMULQ $1000, DX
157 // sec is in AX, nsec in DX 164 // sec is in AX, nsec in DX
158 // return nsec in AX 165 // return nsec in AX
159 IMULQ $1000000000, AX 166 IMULQ $1000000000, AX
160 ADDQ DX, AX 167 ADDQ DX, AX
168 MOVQ AX, ret+0(FP)
161 RET 169 RET
162 170
163 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0-32 171 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0-28
164 » MOVL» 8(SP), DI 172 » MOVL» sig+0(FP), DI
165 » MOVQ» 16(SP), SI 173 » MOVQ» new+8(FP), SI
166 » MOVQ» 24(SP), DX 174 » MOVQ» old+16(FP), DX
167 » MOVL» 32(SP), R10 175 » MOVL» size+24(FP), R10
168 MOVL $14, AX // syscall entry 176 MOVL $14, AX // syscall entry
169 SYSCALL 177 SYSCALL
170 CMPQ AX, $0xfffffffffffff001 178 CMPQ AX, $0xfffffffffffff001
171 JLS 2(PC) 179 JLS 2(PC)
172 MOVL $0xf1, 0xf1 // crash 180 MOVL $0xf1, 0xf1 // crash
173 RET 181 RET
174 182
175 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-32 183 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-36
176 » MOVL» 8(SP), DI 184 » MOVQ» sig+0(FP), DI
177 » MOVQ» 16(SP), SI 185 » MOVQ» new+8(FP), SI
178 » MOVQ» 24(SP), DX 186 » MOVQ» old+16(FP), DX
179 » MOVQ» 32(SP), R10 187 » MOVQ» size+24(FP), R10
180 MOVL $13, AX // syscall entry 188 MOVL $13, AX // syscall entry
181 SYSCALL 189 SYSCALL
190 MOVL AX, ret+32(FP)
182 RET 191 RET
183 192
184 TEXT runtime·sigtramp(SB),NOSPLIT,$64 193 TEXT runtime·sigtramp(SB),NOSPLIT,$64
185 get_tls(BX) 194 get_tls(BX)
186 195
187 // check that g exists 196 // check that g exists
188 MOVQ g(BX), R10 197 MOVQ g(BX), R10
189 CMPQ R10, $0 198 CMPQ R10, $0
190 JNE 5(PC) 199 JNE 5(PC)
191 MOVQ DI, 0(SP) 200 MOVQ DI, 0(SP)
(...skipping 21 matching lines...) Expand all
213 MOVQ 40(SP), R10 222 MOVQ 40(SP), R10
214 MOVQ R10, g(BX) 223 MOVQ R10, g(BX)
215 RET 224 RET
216 225
217 TEXT runtime·sigreturn(SB),NOSPLIT,$0 226 TEXT runtime·sigreturn(SB),NOSPLIT,$0
218 MOVL $15, AX // rt_sigreturn 227 MOVL $15, AX // rt_sigreturn
219 SYSCALL 228 SYSCALL
220 INT $3 // not reached 229 INT $3 // not reached
221 230
222 TEXT runtime·mmap(SB),NOSPLIT,$0 231 TEXT runtime·mmap(SB),NOSPLIT,$0
223 » MOVQ» 8(SP), DI 232 » MOVQ» addr+0(FP), DI
224 » MOVQ» 16(SP), SI 233 » MOVQ» n+8(FP), SI
225 » MOVL» 24(SP), DX 234 » MOVL» prot+16(FP), DX
226 » MOVL» 28(SP), R10 235 » MOVL» flags+20(FP), R10
227 » MOVL» 32(SP), R8 236 » MOVL» fd+24(FP), R8
228 » MOVL» 36(SP), R9 237 » MOVL» off+28(FP), R9
229 238
230 MOVL $9, AX // mmap 239 MOVL $9, AX // mmap
231 SYSCALL 240 SYSCALL
232 CMPQ AX, $0xfffffffffffff001 241 CMPQ AX, $0xfffffffffffff001
233 JLS 3(PC) 242 JLS 3(PC)
234 NOTQ AX 243 NOTQ AX
235 INCQ AX 244 INCQ AX
245 MOVQ AX, ret+32(FP)
236 RET 246 RET
237 247
238 TEXT runtime·munmap(SB),NOSPLIT,$0 248 TEXT runtime·munmap(SB),NOSPLIT,$0
239 » MOVQ» 8(SP), DI 249 » MOVQ» addr+0(FP), DI
240 » MOVQ» 16(SP), SI 250 » MOVQ» n+8(FP), SI
241 MOVQ $11, AX // munmap 251 MOVQ $11, AX // munmap
242 SYSCALL 252 SYSCALL
243 CMPQ AX, $0xfffffffffffff001 253 CMPQ AX, $0xfffffffffffff001
244 JLS 2(PC) 254 JLS 2(PC)
245 MOVL $0xf1, 0xf1 // crash 255 MOVL $0xf1, 0xf1 // crash
246 RET 256 RET
247 257
248 TEXT runtime·madvise(SB),NOSPLIT,$0 258 TEXT runtime·madvise(SB),NOSPLIT,$0
249 » MOVQ» 8(SP), DI 259 » MOVQ» addr+0(FP), DI
250 » MOVQ» 16(SP), SI 260 » MOVQ» n+8(FP), SI
251 » MOVQ» 24(SP), DX 261 » MOVL» flags+16(FP), DX
252 MOVQ $28, AX // madvise 262 MOVQ $28, AX // madvise
253 SYSCALL 263 SYSCALL
254 // ignore failure - maybe pages are locked 264 // ignore failure - maybe pages are locked
255 RET 265 RET
256 266
257 // int64 futex(int32 *uaddr, int32 op, int32 val, 267 // int64 futex(int32 *uaddr, int32 op, int32 val,
258 // struct timespec *timeout, int32 *uaddr2, int32 val2); 268 // struct timespec *timeout, int32 *uaddr2, int32 val2);
259 TEXT runtime·futex(SB),NOSPLIT,$0 269 TEXT runtime·futex(SB),NOSPLIT,$0
260 » MOVQ» 8(SP), DI 270 » MOVQ» addr+0(FP), DI
261 » MOVL» 16(SP), SI 271 » MOVL» op+8(FP), SI
262 » MOVL» 20(SP), DX 272 » MOVL» val+12(FP), DX
263 » MOVQ» 24(SP), R10 273 » MOVQ» ts+16(FP), R10
264 » MOVQ» 32(SP), R8 274 » MOVQ» addr2+24(FP), R8
265 » MOVL» 40(SP), R9 275 » MOVL» val3+32(FP), R9
266 MOVL $202, AX 276 MOVL $202, AX
267 SYSCALL 277 SYSCALL
278 MOVL AX, ret+40(FP)
268 RET 279 RET
269 280
270 // int64 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); 281 // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void));
271 TEXT runtime·clone(SB),NOSPLIT,$0 282 TEXT runtime·clone(SB),NOSPLIT,$0
272 MOVL flags+8(SP), DI 283 MOVL flags+8(SP), DI
273 MOVQ stack+16(SP), SI 284 MOVQ stack+16(SP), SI
274 285
275 // Copy mp, gp, fn off parent stack for use by child. 286 // Copy mp, gp, fn off parent stack for use by child.
276 // Careful: Linux system call clobbers CX and R11. 287 // Careful: Linux system call clobbers CX and R11.
277 MOVQ mm+24(SP), R8 288 MOVQ mm+24(SP), R8
278 MOVQ gg+32(SP), R9 289 MOVQ gg+32(SP), R9
279 MOVQ fn+40(SP), R12 290 MOVQ fn+40(SP), R12
280 291
281 MOVL $56, AX 292 MOVL $56, AX
282 SYSCALL 293 SYSCALL
283 294
284 // In parent, return. 295 // In parent, return.
285 CMPQ AX, $0 296 CMPQ AX, $0
286 » JEQ» 2(PC) 297 » JEQ» 3(PC)
298 » MOVL» AX, ret+40(FP)
287 RET 299 RET
288 300
289 // In child, on new stack. 301 // In child, on new stack.
290 MOVQ SI, SP 302 MOVQ SI, SP
291 303
292 // Initialize m->procid to Linux tid 304 // Initialize m->procid to Linux tid
293 MOVL $186, AX // gettid 305 MOVL $186, AX // gettid
294 SYSCALL 306 SYSCALL
295 MOVQ AX, m_procid(R8) 307 MOVQ AX, m_procid(R8)
296 308
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 JLS 2(PC) 347 JLS 2(PC)
336 MOVL $0xf1, 0xf1 // crash 348 MOVL $0xf1, 0xf1 // crash
337 RET 349 RET
338 350
339 TEXT runtime·osyield(SB),NOSPLIT,$0 351 TEXT runtime·osyield(SB),NOSPLIT,$0
340 MOVL $24, AX 352 MOVL $24, AX
341 SYSCALL 353 SYSCALL
342 RET 354 RET
343 355
344 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0 356 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0
345 » MOVQ» 8(SP), DI 357 » MOVQ» pid+0(FP), DI
346 » MOVL» 16(SP), SI 358 » MOVQ» len+8(FP), SI
347 » MOVQ» 24(SP), DX 359 » MOVQ» buf+16(FP), DX
348 MOVL $204, AX // syscall entry 360 MOVL $204, AX // syscall entry
349 SYSCALL 361 SYSCALL
362 MOVL AX, ret+24(FP)
350 RET 363 RET
351 364
352 // int32 runtime·epollcreate(int32 size); 365 // int32 runtime·epollcreate(int32 size);
353 TEXT runtime·epollcreate(SB),NOSPLIT,$0 366 TEXT runtime·epollcreate(SB),NOSPLIT,$0
354 » MOVL 8(SP), DI 367 » MOVL size+0(FP), DI
355 MOVL $213, AX // syscall entry 368 MOVL $213, AX // syscall entry
356 SYSCALL 369 SYSCALL
370 MOVL AX, ret+8(FP)
357 RET 371 RET
358 372
359 // int32 runtime·epollcreate1(int32 flags); 373 // int32 runtime·epollcreate1(int32 flags);
360 TEXT runtime·epollcreate1(SB),NOSPLIT,$0 374 TEXT runtime·epollcreate1(SB),NOSPLIT,$0
361 » MOVL» 8(SP), DI 375 » MOVL» flags+0(FP), DI
362 MOVL $291, AX // syscall entry 376 MOVL $291, AX // syscall entry
363 SYSCALL 377 SYSCALL
378 MOVL AX, ret+8(FP)
364 RET 379 RET
365 380
366 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); 381 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev);
367 TEXT runtime·epollctl(SB),NOSPLIT,$0 382 TEXT runtime·epollctl(SB),NOSPLIT,$0
368 » MOVL» 8(SP), DI 383 » MOVL» epfd+0(FP), DI
369 » MOVL» 12(SP), SI 384 » MOVL» op+4(FP), SI
370 » MOVL» 16(SP), DX 385 » MOVL» fd+8(FP), DX
371 » MOVQ» 24(SP), R10 386 » MOVQ» ev+16(FP), R10
372 MOVL $233, AX // syscall entry 387 MOVL $233, AX // syscall entry
373 SYSCALL 388 SYSCALL
389 MOVL AX, ret+24(FP)
374 RET 390 RET
375 391
376 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout) ; 392 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout) ;
377 TEXT runtime·epollwait(SB),NOSPLIT,$0 393 TEXT runtime·epollwait(SB),NOSPLIT,$0
378 » MOVL» 8(SP), DI 394 » MOVL» epfd+0(FP), DI
379 » MOVQ» 16(SP), SI 395 » MOVQ» ev+8(FP), SI
380 » MOVL» 24(SP), DX 396 » MOVL» nev+16(FP), DX
381 » MOVL» 28(SP), R10 397 » MOVL» timeout+20(FP), R10
382 MOVL $232, AX // syscall entry 398 MOVL $232, AX // syscall entry
383 SYSCALL 399 SYSCALL
400 MOVL AX, ret+24(FP)
384 RET 401 RET
385 402
386 // void runtime·closeonexec(int32 fd); 403 // void runtime·closeonexec(int32 fd);
387 TEXT runtime·closeonexec(SB),NOSPLIT,$0 404 TEXT runtime·closeonexec(SB),NOSPLIT,$0
388 » MOVL 8(SP), DI // fd 405 » MOVL fd+0(FP), DI // fd
389 MOVQ $2, SI // F_SETFD 406 MOVQ $2, SI // F_SETFD
390 MOVQ $1, DX // FD_CLOEXEC 407 MOVQ $1, DX // FD_CLOEXEC
391 MOVL $72, AX // fcntl 408 MOVL $72, AX // fcntl
392 SYSCALL 409 SYSCALL
393 RET 410 RET
OLDNEW
« no previous file with comments | « src/pkg/runtime/sys_linux_386.s ('k') | src/pkg/runtime/sys_linux_arm.s » ('j') | no next file with comments »

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