]> Cypherpunks.ru repositories - gostls13.git/blob - src/syscall/asm_unix_386.s
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / syscall / asm_unix_386.s
1 // Copyright 2009 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 freebsd || netbsd
6
7 #include "textflag.h"
8 #include "funcdata.h"
9
10 //
11 // System call support for some 386 unixes
12 //
13
14 // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
15 // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
16 // Trap # in AX, args on stack above caller pc.
17
18 TEXT    ·Syscall(SB),NOSPLIT,$0-28
19         CALL    runtime·entersyscall(SB)
20         MOVL    trap+0(FP), AX  // syscall entry
21         // slide args down on top of system call number
22         LEAL            a1+4(FP), SI
23         LEAL            trap+0(FP), DI
24         CLD
25         MOVSL
26         MOVSL
27         MOVSL
28         INT     $0x80
29         JAE     ok
30         MOVL    $-1, r1+16(FP)  // r1
31         MOVL    $-1, r2+20(FP)  // r2
32         MOVL    AX, err+24(FP)  // errno
33         CALL    runtime·exitsyscall(SB)
34         RET
35 ok:
36         MOVL    AX, r1+16(FP)   // r1
37         MOVL    DX, r2+20(FP)   // r2
38         MOVL    $0, err+24(FP)  // errno
39         CALL    runtime·exitsyscall(SB)
40         RET
41
42 TEXT    ·Syscall6(SB),NOSPLIT,$0-40
43         CALL    runtime·entersyscall(SB)
44         MOVL    trap+0(FP), AX  // syscall entry
45         // slide args down on top of system call number
46         LEAL            a1+4(FP), SI
47         LEAL            trap+0(FP), DI
48         CLD
49         MOVSL
50         MOVSL
51         MOVSL
52         MOVSL
53         MOVSL
54         MOVSL
55         INT     $0x80
56         JAE     ok6
57         MOVL    $-1, r1+28(FP)  // r1
58         MOVL    $-1, r2+32(FP)  // r2
59         MOVL    AX, err+36(FP)  // errno
60         CALL    runtime·exitsyscall(SB)
61         RET
62 ok6:
63         MOVL    AX, r1+28(FP)   // r1
64         MOVL    DX, r2+32(FP)   // r2
65         MOVL    $0, err+36(FP)  // errno
66         CALL    runtime·exitsyscall(SB)
67         RET
68
69 TEXT    ·Syscall9(SB),NOSPLIT,$0-52
70         CALL    runtime·entersyscall(SB)
71         MOVL    num+0(FP), AX   // syscall entry
72         // slide args down on top of system call number
73         LEAL            a1+4(FP), SI
74         LEAL            num+0(FP), DI
75         CLD
76         MOVSL
77         MOVSL
78         MOVSL
79         MOVSL
80         MOVSL
81         MOVSL
82         MOVSL
83         MOVSL
84         MOVSL
85         INT     $0x80
86         JAE     ok9
87         MOVL    $-1, r1+40(FP)  // r1
88         MOVL    $-1, r2+44(FP)  // r2
89         MOVL    AX, err+48(FP)  // errno
90         CALL    runtime·exitsyscall(SB)
91         RET
92 ok9:
93         MOVL    AX, r1+40(FP)   // r1
94         MOVL    DX, r2+44(FP)   // r2
95         MOVL    $0, err+48(FP)  // errno
96         CALL    runtime·exitsyscall(SB)
97         RET
98
99 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
100         MOVL    trap+0(FP), AX  // syscall entry
101         // slide args down on top of system call number
102         LEAL            a1+4(FP), SI
103         LEAL            trap+0(FP), DI
104         CLD
105         MOVSL
106         MOVSL
107         MOVSL
108         INT     $0x80
109         JAE     ok1
110         MOVL    $-1, r1+16(FP)  // r1
111         MOVL    $-1, r2+20(FP)  // r2
112         MOVL    AX, err+24(FP)  // errno
113         RET
114 ok1:
115         MOVL    AX, r1+16(FP)   // r1
116         MOVL    DX, r2+20(FP)   // r2
117         MOVL    $0, err+24(FP)  // errno
118         RET
119
120 TEXT    ·RawSyscall6(SB),NOSPLIT,$0-40
121         MOVL    trap+0(FP), AX  // syscall entry
122         // slide args down on top of system call number
123         LEAL            a1+4(FP), SI
124         LEAL            trap+0(FP), DI
125         CLD
126         MOVSL
127         MOVSL
128         MOVSL
129         MOVSL
130         MOVSL
131         MOVSL
132         INT     $0x80
133         JAE     ok2
134         MOVL    $-1, r1+28(FP)  // r1
135         MOVL    $-1, r2+32(FP)  // r2
136         MOVL    AX, err+36(FP)  // errno
137         RET
138 ok2:
139         MOVL    AX, r1+28(FP)   // r1
140         MOVL    DX, r2+32(FP)   // r2
141         MOVL    $0, err+36(FP)  // errno
142         RET