Text file src/pkg/syscall/asm_unix_amd64.s
1 // +build netbsd freebsd openbsd dragonfly
2
3 // Copyright 2009 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 #include "textflag.h"
8 #include "funcdata.h"
9
10 //
11 // System call support for AMD64 unixes
12 //
13
14 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64)
15 // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64)
16 // Trap # in AX, args in DI SI DX, return in AX DX
17
18 TEXT ·Syscall(SB),NOSPLIT,$0-56
19 CALL runtime·entersyscall(SB)
20 MOVQ trap+0(FP), AX // syscall entry
21 MOVQ a1+8(FP), DI
22 MOVQ a2+16(FP), SI
23 MOVQ a3+24(FP), DX
24 MOVQ $0, R10
25 MOVQ $0, R8
26 MOVQ $0, R9
27 SYSCALL
28 JCC ok
29 MOVQ $-1, r1+32(FP) // r1
30 MOVQ $0, r2+40(FP) // r2
31 MOVQ AX, err+48(FP) // errno
32 CALL runtime·exitsyscall(SB)
33 RET
34 ok:
35 MOVQ AX, r1+32(FP) // r1
36 MOVQ DX, r2+40(FP) // r2
37 MOVQ $0, err+48(FP) // errno
38 CALL runtime·exitsyscall(SB)
39 RET
40
41 TEXT ·Syscall6(SB),NOSPLIT,$0-80
42 CALL runtime·entersyscall(SB)
43 MOVQ trap+0(FP), AX // syscall entry
44 MOVQ a1+8(FP), DI
45 MOVQ a2+16(FP), SI
46 MOVQ a3+24(FP), DX
47 MOVQ a4+32(FP), R10
48 MOVQ a5+40(FP), R8
49 MOVQ a6+48(FP), R9
50 SYSCALL
51 JCC ok6
52 MOVQ $-1, r1+56(FP) // r1
53 MOVQ $0, r2+64(FP) // r2
54 MOVQ AX, err+72(FP) // errno
55 CALL runtime·exitsyscall(SB)
56 RET
57 ok6:
58 MOVQ AX, r1+56(FP) // r1
59 MOVQ DX, r2+64(FP) // r2
60 MOVQ $0, err+72(FP) // errno
61 CALL runtime·exitsyscall(SB)
62 RET
63
64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
65 MOVQ a1+8(FP), DI
66 MOVQ a2+16(FP), SI
67 MOVQ a3+24(FP), DX
68 MOVQ $0, R10
69 MOVQ $0, R8
70 MOVQ $0, R9
71 MOVQ trap+0(FP), AX // syscall entry
72 SYSCALL
73 JCC ok1
74 MOVQ $-1, r1+32(FP) // r1
75 MOVQ $0, r2+40(FP) // r2
76 MOVQ AX, err+48(FP) // errno
77 RET
78 ok1:
79 MOVQ AX, r1+32(FP) // r1
80 MOVQ DX, r2+40(FP) // r2
81 MOVQ $0, err+48(FP) // errno
82 RET
83
84 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
85 MOVQ a1+8(FP), DI
86 MOVQ a2+16(FP), SI
87 MOVQ a3+24(FP), DX
88 MOVQ a4+32(FP), R10
89 MOVQ a5+40(FP), R8
90 MOVQ a6+48(FP), R9
91 MOVQ trap+0(FP), AX // syscall entry
92 SYSCALL
93 JCC ok2
94 MOVQ $-1, r1+56(FP) // r1
95 MOVQ $0, r2+64(FP) // r2
96 MOVQ AX, err+72(FP) // errno
97 RET
98 ok2:
99 MOVQ AX, r1+56(FP) // r1
100 MOVQ DX, r2+64(FP) // r2
101 MOVQ $0, err+72(FP) // errno
102 RET
View as plain text