|
| 1 | +// Copyright 2019 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 | + |
| 7 | +// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); |
| 8 | +TEXT ·Syscall(SB),NOSPLIT,$0-56 |
| 9 | + BL runtime·entersyscall(SB) |
| 10 | + MOVD a1+8(FP), R0 |
| 11 | + MOVD a2+16(FP), R1 |
| 12 | + MOVD a3+24(FP), R2 |
| 13 | + MOVD $0, R3 |
| 14 | + MOVD $0, R4 |
| 15 | + MOVD $0, R5 |
| 16 | + MOVD trap+0(FP), R8 // syscall number |
| 17 | + SVC |
| 18 | + BCC ok |
| 19 | + MOVD $-1, R4 |
| 20 | + MOVD R4, r1+32(FP) // r1 |
| 21 | + MOVD ZR, r2+40(FP) // r2 |
| 22 | + MOVD R0, err+48(FP) // errno |
| 23 | + BL runtime·exitsyscall(SB) |
| 24 | + RET |
| 25 | +ok: |
| 26 | + MOVD R0, r1+32(FP) // r1 |
| 27 | + MOVD R1, r2+40(FP) // r2 |
| 28 | + MOVD ZR, err+48(FP) // errno |
| 29 | + BL runtime·exitsyscall(SB) |
| 30 | + RET |
| 31 | + |
| 32 | +TEXT ·Syscall6(SB),NOSPLIT,$0-80 |
| 33 | + BL runtime·entersyscall(SB) |
| 34 | + MOVD a1+8(FP), R0 |
| 35 | + MOVD a2+16(FP), R1 |
| 36 | + MOVD a3+24(FP), R2 |
| 37 | + MOVD a4+32(FP), R3 |
| 38 | + MOVD a5+40(FP), R4 |
| 39 | + MOVD a6+48(FP), R5 |
| 40 | + MOVD trap+0(FP), R8 // syscall number |
| 41 | + SVC |
| 42 | + BCC ok |
| 43 | + MOVD $-1, R4 |
| 44 | + MOVD R4, r1+56(FP) // r1 |
| 45 | + MOVD ZR, r2+64(FP) // r2 |
| 46 | + MOVD R0, err+72(FP) // errno |
| 47 | + BL runtime·exitsyscall(SB) |
| 48 | + RET |
| 49 | +ok: |
| 50 | + MOVD R0, r1+56(FP) // r1 |
| 51 | + MOVD R1, r2+64(FP) // r2 |
| 52 | + MOVD ZR, err+72(FP) // errno |
| 53 | + BL runtime·exitsyscall(SB) |
| 54 | + RET |
| 55 | + |
| 56 | +TEXT ·Syscall9(SB),NOSPLIT,$0-104 |
| 57 | + BL runtime·entersyscall(SB) |
| 58 | + MOVD a1+8(FP), R0 |
| 59 | + MOVD a2+16(FP), R1 |
| 60 | + MOVD a3+24(FP), R2 |
| 61 | + MOVD a4+32(FP), R3 |
| 62 | + MOVD a5+40(FP), R4 |
| 63 | + MOVD a6+48(FP), R5 |
| 64 | + MOVD a7+56(FP), R6 |
| 65 | + MOVD a8+64(FP), R7 |
| 66 | + MOVD a9+72(FP), R8 // on stack |
| 67 | + MOVD R8, 8(RSP) |
| 68 | + MOVD trap+0(FP), R8 // syscall number |
| 69 | + SVC |
| 70 | + BCC ok |
| 71 | + MOVD $-1, R4 |
| 72 | + MOVD R4, r1+80(FP) // r1 |
| 73 | + MOVD ZR, r2+88(FP) // r2 |
| 74 | + MOVD R0, err+96(FP) // errno |
| 75 | + BL runtime·exitsyscall(SB) |
| 76 | + RET |
| 77 | +ok: |
| 78 | + MOVD R0, r1+80(FP) // r1 |
| 79 | + MOVD R1, r2+88(FP) // r2 |
| 80 | + MOVD ZR, err+96(FP) // errno |
| 81 | + BL runtime·exitsyscall(SB) |
| 82 | + RET |
| 83 | + |
| 84 | +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 |
| 85 | + MOVD a1+8(FP), R0 |
| 86 | + MOVD a2+16(FP), R1 |
| 87 | + MOVD a3+24(FP), R2 |
| 88 | + MOVD $0, R3 |
| 89 | + MOVD $0, R4 |
| 90 | + MOVD $0, R5 |
| 91 | + MOVD trap+0(FP), R8 // syscall number |
| 92 | + SVC |
| 93 | + BCC ok |
| 94 | + MOVD $-1, R4 |
| 95 | + MOVD R4, r1+32(FP) // r1 |
| 96 | + MOVD ZR, r2+40(FP) // r2 |
| 97 | + MOVD R0, err+48(FP) // errno |
| 98 | + RET |
| 99 | +ok: |
| 100 | + MOVD R0, r1+32(FP) // r1 |
| 101 | + MOVD R1, r2+40(FP) // r2 |
| 102 | + MOVD ZR, err+48(FP) // errno |
| 103 | + RET |
| 104 | + |
| 105 | +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 |
| 106 | + MOVD a1+8(FP), R0 |
| 107 | + MOVD a2+16(FP), R1 |
| 108 | + MOVD a3+24(FP), R2 |
| 109 | + MOVD a4+32(FP), R3 |
| 110 | + MOVD a5+40(FP), R4 |
| 111 | + MOVD a6+48(FP), R5 |
| 112 | + MOVD trap+0(FP), R8 // syscall number |
| 113 | + SVC |
| 114 | + BCC ok |
| 115 | + MOVD $-1, R4 |
| 116 | + MOVD R4, r1+56(FP) // r1 |
| 117 | + MOVD ZR, r2+64(FP) // r2 |
| 118 | + MOVD R0, err+72(FP) // errno |
| 119 | + RET |
| 120 | +ok: |
| 121 | + MOVD R0, r1+56(FP) // r1 |
| 122 | + MOVD R1, r2+64(FP) // r2 |
| 123 | + MOVD ZR, err+72(FP) // errno |
| 124 | + RET |
0 commit comments