github.com/c12o16h1/go/src@v0.0.0-20200114212001-5a151c0f00ed/syscall/asm_linux_mips64x.s (about)

     1  // Copyright 2014 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  // +build linux
     6  // +build mips64 mips64le
     7  
     8  #include "textflag.h"
     9  
    10  //
    11  // System calls for mips64, Linux
    12  //
    13  
    14  // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
    15  TEXT ·Syscall(SB),NOSPLIT,$0-56
    16  	JAL	runtime·entersyscall(SB)
    17  	MOVV	a1+8(FP), R4
    18  	MOVV	a2+16(FP), R5
    19  	MOVV	a3+24(FP), R6
    20  	MOVV	R0, R7
    21  	MOVV	R0, R8
    22  	MOVV	R0, R9
    23  	MOVV	trap+0(FP), R2	// syscall entry
    24  	SYSCALL
    25  	BEQ	R7, ok
    26  	MOVV	$-1, R1
    27  	MOVV	R1, r1+32(FP)	// r1
    28  	MOVV	R0, r2+40(FP)	// r2
    29  	MOVV	R2, err+48(FP)	// errno
    30  	JAL	runtime·exitsyscall(SB)
    31  	RET
    32  ok:
    33  	MOVV	R2, r1+32(FP)	// r1
    34  	MOVV	R3, r2+40(FP)	// r2
    35  	MOVV	R0, err+48(FP)	// errno
    36  	JAL	runtime·exitsyscall(SB)
    37  	RET
    38  
    39  TEXT ·Syscall6(SB),NOSPLIT,$0-80
    40  	JAL	runtime·entersyscall(SB)
    41  	MOVV	a1+8(FP), R4
    42  	MOVV	a2+16(FP), R5
    43  	MOVV	a3+24(FP), R6
    44  	MOVV	a4+32(FP), R7
    45  	MOVV	a5+40(FP), R8
    46  	MOVV	a6+48(FP), R9
    47  	MOVV	trap+0(FP), R2	// syscall entry
    48  	SYSCALL
    49  	BEQ	R7, ok6
    50  	MOVV	$-1, R1
    51  	MOVV	R1, r1+56(FP)	// r1
    52  	MOVV	R0, r2+64(FP)	// r2
    53  	MOVV	R2, err+72(FP)	// errno
    54  	JAL	runtime·exitsyscall(SB)
    55  	RET
    56  ok6:
    57  	MOVV	R2, r1+56(FP)	// r1
    58  	MOVV	R3, r2+64(FP)	// r2
    59  	MOVV	R0, err+72(FP)	// errno
    60  	JAL	runtime·exitsyscall(SB)
    61  	RET
    62  
    63  TEXT ·RawSyscall(SB),NOSPLIT,$0-56
    64  	MOVV	a1+8(FP), R4
    65  	MOVV	a2+16(FP), R5
    66  	MOVV	a3+24(FP), R6
    67  	MOVV	R0, R7
    68  	MOVV	R0, R8
    69  	MOVV	R0, R9
    70  	MOVV	trap+0(FP), R2	// syscall entry
    71  	SYSCALL
    72  	BEQ	R7, ok1
    73  	MOVV	$-1, R1
    74  	MOVV	R1, r1+32(FP)	// r1
    75  	MOVV	R0, r2+40(FP)	// r2
    76  	MOVV	R2, err+48(FP)	// errno
    77  	RET
    78  ok1:
    79  	MOVV	R2, r1+32(FP)	// r1
    80  	MOVV	R3, r2+40(FP)	// r2
    81  	MOVV	R0, err+48(FP)	// errno
    82  	RET
    83  
    84  TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
    85  	MOVV	a1+8(FP), R4
    86  	MOVV	a2+16(FP), R5
    87  	MOVV	a3+24(FP), R6
    88  	MOVV	a4+32(FP), R7
    89  	MOVV	a5+40(FP), R8
    90  	MOVV	a6+48(FP), R9
    91  	MOVV	trap+0(FP), R2	// syscall entry
    92  	SYSCALL
    93  	BEQ	R7, ok2
    94  	MOVV	$-1, R1
    95  	MOVV	R1, r1+56(FP)	// r1
    96  	MOVV	R0, r2+64(FP)	// r2
    97  	MOVV	R2, err+72(FP)	// errno
    98  	RET
    99  ok2:
   100  	MOVV	R2, r1+56(FP)	// r1
   101  	MOVV	R3, r2+64(FP)	// r2
   102  	MOVV	R0, err+72(FP)	// errno
   103  	RET
   104  
   105  TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
   106  	MOVV	a1+8(FP), R4
   107  	MOVV	a2+16(FP), R5
   108  	MOVV	a3+24(FP), R6
   109  	MOVV	R0, R7
   110  	MOVV	R0, R8
   111  	MOVV	R0, R9
   112  	MOVV	trap+0(FP), R2	// syscall entry
   113  	SYSCALL
   114  	MOVV	R2, r1+32(FP)
   115  	MOVV	R3, r2+40(FP)
   116  	RET