...

Text file src/syscall/asm_freebsd_riscv64.s

Documentation: syscall

     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)
    12TEXT ·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
    25err:
    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)
    35TEXT ·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
    51err:
    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)
    60TEXT ·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
    71err:
    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)
    79TEXT ·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
    93err:
    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)
   102TEXT ·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
   119err:
   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

View as plain text