...

Text file src/syscall/asm_openbsd_mips64.s

Documentation: syscall

     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

View as plain text