blob: be6727cb1a610a0d69dd36a6067831a741489e5a [file] [log] [blame]
Shenghou Maf3e20232014-08-12 19:49:03 -04001// 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// +build linux
Russ Cox09d92b62014-12-05 19:13:20 -05006// +build ppc64 ppc64le
Shenghou Maf3e20232014-08-12 19:49:03 -04007
Austin Clements062e3542014-10-27 17:27:03 -04008#include "textflag.h"
Shenghou Maf3e20232014-08-12 19:49:03 -04009
10//
Russ Cox09d92b62014-12-05 19:13:20 -050011// System calls for ppc64, Linux
Shenghou Maf3e20232014-08-12 19:49:03 -040012//
13
14// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
15
16TEXT ·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
Shenghou Maf3e20232014-08-12 19:49:03 -040027 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)
Austin Clements2774b372015-06-03 14:59:27 -040032 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040033ok:
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)
Austin Clements2774b372015-06-03 14:59:27 -040038 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040039
40TEXT ·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
Shenghou Maf3e20232014-08-12 19:49:03 -040051 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)
Austin Clements2774b372015-06-03 14:59:27 -040056 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040057ok6:
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)
Austin Clements2774b372015-06-03 14:59:27 -040062 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040063
64TEXT ·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
Shenghou Maf3e20232014-08-12 19:49:03 -040074 MOVD $-1, R4
75 MOVD R4, r1+32(FP) // r1
76 MOVD R0, r2+40(FP) // r2
77 MOVD R3, err+48(FP) // errno
Austin Clements2774b372015-06-03 14:59:27 -040078 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040079ok1:
80 MOVD R3, r1+32(FP) // r1
81 MOVD R4, r2+40(FP) // r2
82 MOVD R0, err+48(FP) // errno
Austin Clements2774b372015-06-03 14:59:27 -040083 RET
Shenghou Maf3e20232014-08-12 19:49:03 -040084
85TEXT ·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
Shenghou Maf3e20232014-08-12 19:49:03 -040095 MOVD $-1, R4
96 MOVD R4, r1+56(FP) // r1
97 MOVD R0, r2+64(FP) // r2
98 MOVD R3, err+72(FP) // errno
Austin Clements2774b372015-06-03 14:59:27 -040099 RET
Shenghou Maf3e20232014-08-12 19:49:03 -0400100ok2:
101 MOVD R3, r1+56(FP) // r1
102 MOVD R4, r2+64(FP) // r2
103 MOVD R0, err+72(FP) // errno
Austin Clements2774b372015-06-03 14:59:27 -0400104 RET