Text file
src/syscall/asm_linux_ppc64x.s
Documentation: syscall
1 // Copyright 2014 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 //go:build linux && (ppc64 || ppc64le)
6 // +build linux
7 // +build ppc64 ppc64le
8
9 #include "textflag.h"
10
11 //
12 // System calls for ppc64, Linux
13 //
14
15 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
16 TEXT ·Syscall(SB),NOSPLIT,$0-56
17 BL runtime·entersyscall(SB)
18 MOVD a1+8(FP), R3
19 MOVD a2+16(FP), R4
20 MOVD a3+24(FP), R5
21 MOVD R0, R6
22 MOVD R0, R7
23 MOVD R0, R8
24 MOVD trap+0(FP), R9 // syscall entry
25 SYSCALL R9
26 BVC ok
27 MOVD $-1, R4
28 MOVD R4, r1+32(FP) // r1
29 MOVD R0, r2+40(FP) // r2
30 MOVD R3, err+48(FP) // errno
31 BL runtime·exitsyscall(SB)
32 RET
33 ok:
34 MOVD R3, r1+32(FP) // r1
35 MOVD R4, r2+40(FP) // r2
36 MOVD R0, err+48(FP) // errno
37 BL runtime·exitsyscall(SB)
38 RET
39
40 TEXT ·Syscall6(SB),NOSPLIT,$0-80
41 BL runtime·entersyscall(SB)
42 MOVD a1+8(FP), R3
43 MOVD a2+16(FP), R4
44 MOVD a3+24(FP), R5
45 MOVD a4+32(FP), R6
46 MOVD a5+40(FP), R7
47 MOVD a6+48(FP), R8
48 MOVD trap+0(FP), R9 // syscall entry
49 SYSCALL R9
50 BVC ok6
51 MOVD $-1, R4
52 MOVD R4, r1+56(FP) // r1
53 MOVD R0, r2+64(FP) // r2
54 MOVD R3, err+72(FP) // errno
55 BL runtime·exitsyscall(SB)
56 RET
57 ok6:
58 MOVD R3, r1+56(FP) // r1
59 MOVD R4, r2+64(FP) // r2
60 MOVD R0, err+72(FP) // errno
61 BL runtime·exitsyscall(SB)
62 RET
63
64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
65 MOVD a1+8(FP), R3
66 MOVD a2+16(FP), R4
67 MOVD a3+24(FP), R5
68 MOVD R0, R6
69 MOVD R0, R7
70 MOVD R0, R8
71 MOVD trap+0(FP), R9 // syscall entry
72 SYSCALL R9
73 BVC ok1
74 MOVD $-1, R4
75 MOVD R4, r1+32(FP) // r1
76 MOVD R0, r2+40(FP) // r2
77 MOVD R3, err+48(FP) // errno
78 RET
79 ok1:
80 MOVD R3, r1+32(FP) // r1
81 MOVD R4, r2+40(FP) // r2
82 MOVD R0, err+48(FP) // errno
83 RET
84
85 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
86 MOVD a1+8(FP), R3
87 MOVD a2+16(FP), R4
88 MOVD a3+24(FP), R5
89 MOVD a4+32(FP), R6
90 MOVD a5+40(FP), R7
91 MOVD a6+48(FP), R8
92 MOVD trap+0(FP), R9 // syscall entry
93 SYSCALL R9
94 BVC ok2
95 MOVD $-1, R4
96 MOVD R4, r1+56(FP) // r1
97 MOVD R0, r2+64(FP) // r2
98 MOVD R3, err+72(FP) // errno
99 RET
100 ok2:
101 MOVD R3, r1+56(FP) // r1
102 MOVD R4, r2+64(FP) // r2
103 MOVD R0, err+72(FP) // errno
104 RET
105
106 // func rawVforkSyscall(trap, a1 uintptr) (r1, err uintptr)
107 TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-32
108 MOVD a1+8(FP), R3
109 MOVD R0, R4
110 MOVD R0, R5
111 MOVD R0, R6
112 MOVD R0, R7
113 MOVD R0, R8
114 MOVD trap+0(FP), R9 // syscall entry
115 SYSCALL R9
116 BVC ok
117 MOVD $-1, R4
118 MOVD R4, r1+16(FP) // r1
119 MOVD R3, err+24(FP) // errno
120 RET
121 ok:
122 MOVD R3, r1+16(FP) // r1
123 MOVD R0, err+24(FP) // errno
124 RET
125
126 TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
127 MOVD a1+8(FP), R3
128 MOVD a2+16(FP), R4
129 MOVD a3+24(FP), R5
130 MOVD R0, R6
131 MOVD R0, R7
132 MOVD R0, R8
133 MOVD trap+0(FP), R9 // syscall entry
134 SYSCALL R9
135 MOVD R3, r1+32(FP)
136 MOVD R4, r2+40(FP)
137 RET
138
View as plain text