1// Copyright 2020 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); 8TEXT ·Syscall(SB),NOSPLIT,$0-56 9 JAL runtime·entersyscall(SB) 10 MOVV a1+8(FP), R4 11 MOVV a2+16(FP), R5 12 MOVV a3+24(FP), R6 13 MOVV R0, R7 14 MOVV R0, R8 15 MOVV R0, R9 16 MOVV trap+0(FP), R2 // syscall entry 17 SYSCALL 18 BEQ R7, ok 19 MOVV $-1, R1 20 MOVV R1, r1+32(FP) // r1 21 MOVV R0, r2+40(FP) // r2 22 MOVV R2, err+48(FP) // errno 23 JAL runtime·exitsyscall(SB) 24 RET 25ok: 26 MOVV R2, r1+32(FP) // r1 27 MOVV R3, r2+40(FP) // r2 28 MOVV R0, err+48(FP) // errno 29 JAL runtime·exitsyscall(SB) 30 RET 31 32TEXT ·Syscall6(SB),NOSPLIT,$0-80 33 JAL runtime·entersyscall(SB) 34 MOVV a1+8(FP), R4 35 MOVV a2+16(FP), R5 36 MOVV a3+24(FP), R6 37 MOVV a4+32(FP), R7 38 MOVV a5+40(FP), R8 39 MOVV a6+48(FP), R9 40 MOVV trap+0(FP), R2 // syscall entry 41 SYSCALL 42 BEQ R7, ok6 43 MOVV $-1, R1 44 MOVV R1, r1+56(FP) // r1 45 MOVV R0, r2+64(FP) // r2 46 MOVV R2, err+72(FP) // errno 47 JAL runtime·exitsyscall(SB) 48 RET 49ok6: 50 MOVV R2, r1+56(FP) // r1 51 MOVV R3, r2+64(FP) // r2 52 MOVV R0, err+72(FP) // errno 53 JAL runtime·exitsyscall(SB) 54 RET 55 56// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); 57// The openbsd/mips64 kernel only accepts eight syscall arguments, except 58// for SYS_syscall, where an additional argument can be passed on the stack. 59TEXT ·Syscall9(SB),NOSPLIT,$0-104 60 JAL runtime·entersyscall(SB) 61 MOVV num+0(FP), R2 // syscall entry 62 MOVV a1+8(FP), R4 63 MOVV a2+16(FP), R5 64 MOVV a3+24(FP), R6 65 MOVV a4+32(FP), R7 66 MOVV a5+40(FP), R8 67 MOVV a6+48(FP), R9 68 MOVV a7+56(FP), R10 69 MOVV a8+64(FP), R11 70 MOVV a9+72(FP), R12 71 SUBVU $16, R29 72 MOVV R12, 0(R29) // arg 9 - only used for SYS_syscall. 73 SYSCALL 74 ADDV $16, R29 75 BEQ R7, ok9 76 MOVV $-1, R1 77 MOVV R1, r1+80(FP) // r1 78 MOVV R0, r2+88(FP) // r2 79 MOVV R2, err+96(FP) // errno 80 JAL runtime·exitsyscall(SB) 81 RET 82ok9: 83 MOVV R2, r1+80(FP) // r1 84 MOVV R3, r2+88(FP) // r2 85 MOVV R0, err+96(FP) // errno 86 CALL runtime·exitsyscall(SB) 87 RET 88 89TEXT ·RawSyscall(SB),NOSPLIT,$0-56 90 MOVV a1+8(FP), R4 91 MOVV a2+16(FP), R5 92 MOVV a3+24(FP), R6 93 MOVV R0, R7 94 MOVV R0, R8 95 MOVV R0, R9 96 MOVV trap+0(FP), R2 // syscall entry 97 SYSCALL 98 BEQ R7, ok1 99 MOVV $-1, R1 100 MOVV R1, r1+32(FP) // r1 101 MOVV R0, r2+40(FP) // r2 102 MOVV R2, err+48(FP) // errno 103 RET 104ok1: 105 MOVV R2, r1+32(FP) // r1 106 MOVV R3, r2+40(FP) // r2 107 MOVV R0, err+48(FP) // errno 108 RET 109 110TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 111 MOVV a1+8(FP), R4 112 MOVV a2+16(FP), R5 113 MOVV a3+24(FP), R6 114 MOVV a4+32(FP), R7 115 MOVV a5+40(FP), R8 116 MOVV a6+48(FP), R9 117 MOVV trap+0(FP), R2 // syscall entry 118 SYSCALL 119 BEQ R7, ok2 120 MOVV $-1, R1 121 MOVV R1, r1+56(FP) // r1 122 MOVV R0, r2+64(FP) // r2 123 MOVV R2, err+72(FP) // errno 124 RET 125ok2: 126 MOVV R2, r1+56(FP) // r1 127 MOVV R3, r2+64(FP) // r2 128 MOVV R0, err+72(FP) // errno 129 RET 130