]> Cypherpunks.ru repositories - gostls13.git/blob - src/syscall/asm_freebsd_arm.s
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / syscall / asm_freebsd_arm.s
1 // Copyright 2012 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 #include "textflag.h"
6 #include "funcdata.h"
7
8 //
9 // System call support for ARM, FreeBSD
10 //
11
12 // func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, errno uintptr);
13 // func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr);
14 // func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, errno uintptr)
15
16 TEXT    ·Syscall(SB),NOSPLIT,$0-28
17         BL runtime·entersyscall(SB)
18         MOVW trap+0(FP), R7 // syscall number
19         MOVW a1+4(FP), R0 // a1
20         MOVW a2+8(FP), R1 // a2
21         MOVW a3+12(FP), R2 // a3
22         SWI $0 // syscall
23         MOVW $0, R2
24         BCS error
25         MOVW R0, r1+16(FP) // r1
26         MOVW R1, r2+20(FP) // r2
27         MOVW R2, err+24(FP) // errno
28         BL runtime·exitsyscall(SB)
29         RET
30 error:
31         MOVW $-1, R3
32         MOVW R3, r1+16(FP) // r1
33         MOVW R2, r2+20(FP) // r2
34         MOVW R0, err+24(FP) // errno
35         BL runtime·exitsyscall(SB)
36         RET
37
38 TEXT    ·Syscall6(SB),NOSPLIT,$0-40
39         BL runtime·entersyscall(SB)
40         MOVW trap+0(FP), R7 // syscall number
41         MOVW a1+4(FP), R0 // a1
42         MOVW a2+8(FP), R1 // a2
43         MOVW a3+12(FP), R2 // a3
44         MOVW a4+16(FP), R3 // a4
45         MOVW R13, R4
46         MOVW $a5+20(FP), R13 // a5 to a6 are passed on stack
47         SWI $0 // syscall
48         MOVW R4, R13
49         MOVW $0, R2
50         BCS error6
51         MOVW R0, r1+28(FP) // r1
52         MOVW R1, r2+32(FP) // r2
53         MOVW R2, err+36(FP) // errno
54         BL runtime·exitsyscall(SB)
55         RET
56 error6:
57         MOVW $-1, R3
58         MOVW R3, r1+28(FP) // r1
59         MOVW R2, r2+32(FP) // r2
60         MOVW R0, err+36(FP) // errno
61         BL runtime·exitsyscall(SB)
62         RET
63
64 TEXT    ·Syscall9(SB),NOSPLIT,$0-52
65         BL runtime·entersyscall(SB)
66         MOVW num+0(FP), R7 // syscall number
67         MOVW a1+4(FP), R0 // a1
68         MOVW a2+8(FP), R1 // a2
69         MOVW a3+12(FP), R2 // a3
70         MOVW a4+16(FP), R3 // a4
71         MOVW R13, R4
72         MOVW $a5+20(FP), R13 // a5 to a9 are passed on stack
73         SWI $0 // syscall
74         MOVW R4, R13
75         MOVW $0, R2
76         BCS error9
77         MOVW R0, r1+40(FP) // r1
78         MOVW R1, r2+44(FP) // r2
79         MOVW R2, err+48(FP) // errno
80         BL runtime·exitsyscall(SB)
81         RET
82 error9:
83         MOVW $-1, R3
84         MOVW R3, r1+40(FP) // r1
85         MOVW R2, r2+44(FP) // r2
86         MOVW R0, err+48(FP) // errno
87         BL runtime·exitsyscall(SB)
88         RET
89
90 TEXT    ·RawSyscall(SB),NOSPLIT,$0-28
91         MOVW trap+0(FP), R7 // syscall number
92         MOVW a1+4(FP), R0 // a1
93         MOVW a2+8(FP), R1 // a2
94         MOVW a3+12(FP), R2 // a3
95         SWI $0 // syscall
96         MOVW $0, R2
97         BCS errorr
98         MOVW R0, r1+16(FP) // r1
99         MOVW R1, r2+20(FP) // r2
100         MOVW R2, err+24(FP) // errno
101         RET
102 errorr:
103         MOVW $-1, R3
104         MOVW R3, r1+16(FP) // r1
105         MOVW R2, r2+20(FP) // r2
106         MOVW R0, err+24(FP) // errno
107         RET
108
109 TEXT    ·RawSyscall6(SB),NOSPLIT,$0-40
110         MOVW trap+0(FP), R7 // syscall number
111         MOVW a1+4(FP), R0 // a1
112         MOVW a2+8(FP), R1 // a2
113         MOVW a3+12(FP), R2 // a3
114         MOVW a4+16(FP), R3 // a4
115         MOVW R13, R4
116         MOVW $a5+20(FP), R13 // a5 to a6 are passed on stack
117         SWI $0 // syscall
118         MOVW R4, R13
119         MOVW $0, R2
120         BCS errorr6
121         MOVW R0, r1+28(FP) // r1
122         MOVW R1, r2+32(FP) // r2
123         MOVW R2, err+36(FP) // errno
124         RET
125 errorr6:
126         MOVW $-1, R3
127         MOVW R3, r1+28(FP) // r1
128         MOVW R2, r2+32(FP) // r2
129         MOVW R0, err+36(FP) // errno
130         RET