github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/syscall/asm_freebsd_riscv64.s (about) 1 // Copyright 2022 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 // 8 // System calls for riscv64, FreeBSD 9 // 10 11 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64) 12 TEXT ·Syscall(SB),NOSPLIT,$0-56 13 CALL runtime·entersyscall(SB) 14 MOV a1+8(FP), A0 15 MOV a2+16(FP), A1 16 MOV a3+24(FP), A2 17 MOV trap+0(FP), T0 // syscall entry 18 ECALL 19 BNE T0, ZERO, err 20 MOV A0, r1+32(FP) // r1 21 MOV A1, r2+40(FP) // r2 22 MOV ZERO, err+48(FP) // errno 23 CALL runtime·exitsyscall(SB) 24 RET 25 err: 26 MOV $-1, T0 27 MOV T0, r1+32(FP) // r1 28 MOV ZERO, r2+40(FP) // r2 29 MOV A0, err+48(FP) // errno 30 CALL runtime·exitsyscall(SB) 31 RET 32 33 34 // func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) 35 TEXT ·Syscall6(SB),NOSPLIT,$0-80 36 CALL runtime·entersyscall(SB) 37 MOV a1+8(FP), A0 38 MOV a2+16(FP), A1 39 MOV a3+24(FP), A2 40 MOV a4+32(FP), A3 41 MOV a5+40(FP), A4 42 MOV a6+48(FP), A5 43 MOV trap+0(FP), T0 // syscall entry 44 ECALL 45 BNE T0, ZERO, err 46 MOV A0, r1+56(FP) // r1 47 MOV A1, r2+64(FP) // r2 48 MOV ZERO, err+72(FP) // errno 49 CALL runtime·exitsyscall(SB) 50 RET 51 err: 52 MOV $-1, T0 53 MOV T0, r1+56(FP) // r1 54 MOV ZERO, r2+64(FP) // r2 55 MOV A0, err+72(FP) // errno 56 CALL runtime·exitsyscall(SB) 57 RET 58 59 // func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) 60 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 61 MOV a1+8(FP), A0 62 MOV a2+16(FP), A1 63 MOV a3+24(FP), A2 64 MOV trap+0(FP), T0 // syscall entry 65 ECALL 66 BNE T0, ZERO, err 67 MOV A0, r1+32(FP) // r1 68 MOV A1, r2+40(FP) // r2 69 MOV ZERO, err+48(FP) // errno 70 RET 71 err: 72 MOV $-1, T0 73 MOV T0, r1+32(FP) // r1 74 MOV ZERO, r2+40(FP) // r2 75 MOV A0, err+48(FP) // errno 76 RET 77 78 // func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) 79 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 80 MOV a1+8(FP), A0 81 MOV a2+16(FP), A1 82 MOV a3+24(FP), A2 83 MOV a4+32(FP), A3 84 MOV a5+40(FP), A4 85 MOV a6+48(FP), A5 86 MOV trap+0(FP), T0 // syscall entry 87 ECALL 88 BNE T0, ZERO, err 89 MOV A0, r1+56(FP) // r1 90 MOV A1, r2+64(FP) // r2 91 MOV ZERO, err+72(FP) // errno 92 RET 93 err: 94 MOV $-1, T0 95 MOV T0, r1+56(FP) // r1 96 MOV ZERO, r2+64(FP) // r2 97 MOV A0, err+72(FP) // errno 98 RET 99 100 // Actually Syscall7 101 // func Syscall9(num uintptr, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, err uintptr) 102 TEXT ·Syscall9(SB),NOSPLIT,$0-104 103 CALL runtime·entersyscall(SB) 104 MOV a1+8(FP), A0 105 MOV a2+16(FP), A1 106 MOV a3+24(FP), A2 107 MOV a4+32(FP), A3 108 MOV a5+40(FP), A4 109 MOV a6+48(FP), A5 110 MOV a7+56(FP), A6 111 MOV num+0(FP), T0 // syscall entry 112 ECALL 113 BNE T0, ZERO, err 114 MOV A0, r1+80(FP) // r1 115 MOV A1, r2+88(FP) // r2 116 MOV ZERO, err+96(FP) // errno 117 CALL runtime·exitsyscall(SB) 118 RET 119 err: 120 MOV $-1, T0 121 MOV T0, r1+80(FP) // r1 122 MOV ZERO, r2+88(FP) // r2 123 MOV A0, err+96(FP) // errno 124 CALL runtime·exitsyscall(SB) 125 RET