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//
8// System calls for riscv64, Linux
9//
10
11// func rawVforkSyscall(trap, a1, a2, a3 uintptr) (r1, err uintptr)
12TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-48
13	MOV	a1+8(FP), A0
14	MOV	a2+16(FP), A1
15	MOV	a3+24(FP), A2
16	MOV	ZERO, A3
17	MOV	ZERO, A4
18	MOV	ZERO, A5
19	MOV	trap+0(FP), A7	// syscall entry
20	ECALL
21	MOV	$-4096, T0
22	BLTU	T0, A0, err
23	MOV	A0, r1+32(FP)	// r1
24	MOV	ZERO, err+40(FP)	// errno
25	RET
26err:
27	MOV	$-1, T0
28	MOV	T0, r1+32(FP)	// r1
29	SUB	A0, ZERO, A0
30	MOV	A0, err+40(FP)	// errno
31	RET
32
33TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
34	MOV	a1+8(FP), A0
35	MOV	a2+16(FP), A1
36	MOV	a3+24(FP), A2
37	MOV	trap+0(FP), A7	// syscall entry
38	ECALL
39	MOV	A0, r1+32(FP)
40	MOV	A1, r2+40(FP)
41	RET
42