Text file
src/syscall/asm_linux_mips64x.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 && (mips64 || mips64le)
6 // +build linux
7 // +build mips64 mips64le
8
9 #include "textflag.h"
10
11 //
12 // System calls for mips64, Linux
13 //
14
15 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
16 TEXT ·Syscall(SB),NOSPLIT,$0-56
17 JAL runtime·entersyscall(SB)
18 MOVV a1+8(FP), R4
19 MOVV a2+16(FP), R5
20 MOVV a3+24(FP), R6
21 MOVV R0, R7
22 MOVV R0, R8
23 MOVV R0, R9
24 MOVV trap+0(FP), R2 // syscall entry
25 SYSCALL
26 BEQ R7, ok
27 MOVV $-1, R1
28 MOVV R1, r1+32(FP) // r1
29 MOVV R0, r2+40(FP) // r2
30 MOVV R2, err+48(FP) // errno
31 JAL runtime·exitsyscall(SB)
32 RET
33 ok:
34 MOVV R2, r1+32(FP) // r1
35 MOVV R3, r2+40(FP) // r2
36 MOVV R0, err+48(FP) // errno
37 JAL runtime·exitsyscall(SB)
38 RET
39
40 TEXT ·Syscall6(SB),NOSPLIT,$0-80
41 JAL runtime·entersyscall(SB)
42 MOVV a1+8(FP), R4
43 MOVV a2+16(FP), R5
44 MOVV a3+24(FP), R6
45 MOVV a4+32(FP), R7
46 MOVV a5+40(FP), R8
47 MOVV a6+48(FP), R9
48 MOVV trap+0(FP), R2 // syscall entry
49 SYSCALL
50 BEQ R7, ok6
51 MOVV $-1, R1
52 MOVV R1, r1+56(FP) // r1
53 MOVV R0, r2+64(FP) // r2
54 MOVV R2, err+72(FP) // errno
55 JAL runtime·exitsyscall(SB)
56 RET
57 ok6:
58 MOVV R2, r1+56(FP) // r1
59 MOVV R3, r2+64(FP) // r2
60 MOVV R0, err+72(FP) // errno
61 JAL runtime·exitsyscall(SB)
62 RET
63
64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
65 MOVV a1+8(FP), R4
66 MOVV a2+16(FP), R5
67 MOVV a3+24(FP), R6
68 MOVV R0, R7
69 MOVV R0, R8
70 MOVV R0, R9
71 MOVV trap+0(FP), R2 // syscall entry
72 SYSCALL
73 BEQ R7, ok1
74 MOVV $-1, R1
75 MOVV R1, r1+32(FP) // r1
76 MOVV R0, r2+40(FP) // r2
77 MOVV R2, err+48(FP) // errno
78 RET
79 ok1:
80 MOVV R2, r1+32(FP) // r1
81 MOVV R3, r2+40(FP) // r2
82 MOVV R0, err+48(FP) // errno
83 RET
84
85 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
86 MOVV a1+8(FP), R4
87 MOVV a2+16(FP), R5
88 MOVV a3+24(FP), R6
89 MOVV a4+32(FP), R7
90 MOVV a5+40(FP), R8
91 MOVV a6+48(FP), R9
92 MOVV trap+0(FP), R2 // syscall entry
93 SYSCALL
94 BEQ R7, ok2
95 MOVV $-1, R1
96 MOVV R1, r1+56(FP) // r1
97 MOVV R0, r2+64(FP) // r2
98 MOVV R2, err+72(FP) // errno
99 RET
100 ok2:
101 MOVV R2, r1+56(FP) // r1
102 MOVV R3, r2+64(FP) // r2
103 MOVV 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 MOVV a1+8(FP), R4
109 MOVV R0, R5
110 MOVV R0, R6
111 MOVV R0, R7
112 MOVV R0, R8
113 MOVV R0, R9
114 MOVV trap+0(FP), R2 // syscall entry
115 SYSCALL
116 BEQ R7, ok
117 MOVV $-1, R1
118 MOVV R1, r1+16(FP) // r1
119 MOVV R2, err+24(FP) // errno
120 RET
121 ok:
122 MOVV R2, r1+16(FP) // r1
123 MOVV R0, err+24(FP) // errno
124 RET
125
126 TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
127 MOVV a1+8(FP), R4
128 MOVV a2+16(FP), R5
129 MOVV a3+24(FP), R6
130 MOVV R0, R7
131 MOVV R0, R8
132 MOVV R0, R9
133 MOVV trap+0(FP), R2 // syscall entry
134 SYSCALL
135 MOVV R2, r1+32(FP)
136 MOVV R3, r2+40(FP)
137 RET
138
View as plain text