github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/runtime/internal/syscall/asm_linux_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 // func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr) 8 // 9 // We need to convert to the syscall ABI. 10 // 11 // arg | ABIInternal | Syscall 12 // --------------------------- 13 // num | A0 | A7 14 // a1 | A1 | A0 15 // a2 | A2 | A1 16 // a3 | A3 | A2 17 // a4 | A4 | A3 18 // a5 | A5 | A4 19 // a6 | A6 | A5 20 // 21 // r1 | A0 | A0 22 // r2 | A1 | A1 23 // err | A2 | part of A0 24 TEXT ·Syscall6<ABIInternal>(SB),NOSPLIT,$0-80 25 MOV A0, A7 26 MOV A1, A0 27 MOV A2, A1 28 MOV A3, A2 29 MOV A4, A3 30 MOV A5, A4 31 MOV A6, A5 32 ECALL 33 MOV $-4096, T0 34 BLTU T0, A0, err 35 // r1 already in A0 36 // r2 already in A1 37 MOV ZERO, A2 // errno 38 RET 39 err: 40 SUB A0, ZERO, A2 // errno 41 MOV $-1, A0 // r1 42 MOV ZERO, A1 // r2 43 RET