LEFT | RIGHT |
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 AMD64, SunOS | 5 // System calls and other sys.stuff for AMD64, SunOS |
6 // /usr/include/sys/syscall.h for syscall numbers. | 6 // /usr/include/sys/syscall.h 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 #include "../../cmd/ld/textflag.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 PUSHQ DI // save for later | 70 PUSHQ DI // save for later |
71 MOVQ libcall_fn(DI), AX | 71 MOVQ libcall_fn(DI), AX |
72 MOVQ libcall_args(DI), R11 | 72 MOVQ libcall_args(DI), R11 |
73 MOVQ libcall_n(DI), R10 | 73 MOVQ libcall_n(DI), R10 |
74 | 74 |
75 get_tls(CX) | 75 get_tls(CX) |
76 MOVQ m(CX), BX | 76 MOVQ m(CX), BX |
77 MOVQ m_perrno(BX), DX | 77 MOVQ m_perrno(BX), DX |
78 CMPQ DX, $0 | 78 CMPQ DX, $0 |
79 JEQ skiperrno1 | 79 JEQ skiperrno1 |
80 » MOVL» $0,» 0(DX) | 80 » MOVL» $0, 0(DX) |
81 | 81 |
82 skiperrno1: | 82 skiperrno1: |
83 CMPQ R11, $0 | 83 CMPQ R11, $0 |
84 JEQ skipargs | 84 JEQ skipargs |
85 // Load 6 args into correspondent registers. | 85 // Load 6 args into correspondent registers. |
86 MOVQ 0(R11), DI | 86 MOVQ 0(R11), DI |
87 MOVQ 8(R11), SI | 87 MOVQ 8(R11), SI |
88 MOVQ 16(R11), DX | 88 MOVQ 16(R11), DX |
89 MOVQ 24(R11), CX | 89 MOVQ 24(R11), CX |
90 MOVQ 32(R11), R8 | 90 MOVQ 32(R11), R8 |
91 MOVQ 40(R11), R9 | 91 MOVQ 40(R11), R9 |
92 skipargs: | 92 skipargs: |
93 | 93 |
94 // Call SysV function | 94 // Call SysV function |
95 CALL AX | 95 CALL AX |
96 | 96 |
97 // Return result | 97 // Return result |
98 POPQ DI | 98 POPQ DI |
99 MOVQ AX, libcall_r1(DI) | 99 MOVQ AX, libcall_r1(DI) |
100 MOVQ DX, libcall_r2(DI) | 100 MOVQ DX, libcall_r2(DI) |
101 | 101 |
102 get_tls(CX) | 102 get_tls(CX) |
103 MOVQ m(CX), BX | 103 MOVQ m(CX), BX |
104 MOVQ m_perrno(BX), AX | 104 MOVQ m_perrno(BX), AX |
105 CMPQ AX, $0 | 105 CMPQ AX, $0 |
106 JEQ skiperrno2 | 106 JEQ skiperrno2 |
107 MOVL 0(AX), AX | 107 MOVL 0(AX), AX |
108 MOVQ AX, libcall_err(DI) | 108 MOVQ AX, libcall_err(DI) |
109 | 109 |
110 skiperrno2:····· | 110 skiperrno2:····· |
111 RET | 111 RET |
112 | 112 |
113 // uint32 tstart_sysvicall(M *newm); | 113 // uint32 tstart_sysvicall(M *newm); |
114 TEXT runtime·tstart_sysvicall(SB),NOSPLIT,$0 | 114 TEXT runtime·tstart_sysvicall(SB),NOSPLIT,$0 |
115 // DI contains first arg newm | 115 // DI contains first arg newm |
116 MOVQ m_g0(DI), DX // g | 116 MOVQ m_g0(DI), DX // g |
117 | 117 |
118 // Make TLS entries point at g and m. | 118 // Make TLS entries point at g and m. |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 // restore registers | 258 // restore registers |
259 MOVQ 32(SP), BX | 259 MOVQ 32(SP), BX |
260 MOVQ 40(SP), BP | 260 MOVQ 40(SP), BP |
261 MOVQ 48(SP), R12 | 261 MOVQ 48(SP), R12 |
262 MOVQ 56(SP), R13 | 262 MOVQ 56(SP), R13 |
263 MOVQ 64(SP), R14 | 263 MOVQ 64(SP), R14 |
264 MOVQ 72(SP), R15 | 264 MOVQ 72(SP), R15 |
265 | 265 |
266 ADDQ $184, SP | 266 ADDQ $184, SP |
267 RET | 267 RET |
LEFT | RIGHT |