github.com/x04/go/src@v0.0.0-20200202162449-3d481ceb3525/syscall/asm_linux_mipsx.s (about)

     1  // Copyright 2016 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 mips mipsle
     7  
     8  #include "textflag.h"
     9  #include "funcdata.h"
    10  
    11  //
    12  // System calls for mips, Linux
    13  //
    14  
    15  // func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
    16  TEXT ·Syscall(SB),NOSPLIT,$0-28
    17  	JAL	runtime·entersyscall(SB)
    18  	MOVW	a1+4(FP), R4
    19  	MOVW	a2+8(FP), R5
    20  	MOVW	a3+12(FP), R6
    21  	MOVW	R0, R7
    22  	MOVW	trap+0(FP), R2	// syscall entry
    23  	SYSCALL
    24  	BEQ	R7, ok
    25  	MOVW	$-1, R1
    26  	MOVW	R1, r1+16(FP)	// r1
    27  	MOVW	R0, r2+20(FP)	// r2
    28  	MOVW	R2, err+24(FP)	// errno
    29  	JAL	runtime·exitsyscall(SB)
    30  	RET
    31  ok:
    32  	MOVW	R2, r1+16(FP)	// r1
    33  	MOVW	R3, r2+20(FP)	// r2
    34  	MOVW	R0, err+24(FP)	// errno
    35  	JAL	runtime·exitsyscall(SB)
    36  	RET
    37  
    38  // func Syscall6(trap trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
    39  // 5th and 6th arg go at sp+16, sp+20.
    40  // Note that frame size of 20 means that 24 bytes gets reserved on stack.
    41  TEXT ·Syscall6(SB),NOSPLIT,$20-40
    42  	NO_LOCAL_POINTERS
    43  	JAL	runtime·entersyscall(SB)
    44  	MOVW	a1+4(FP), R4
    45  	MOVW	a2+8(FP), R5
    46  	MOVW	a3+12(FP), R6
    47  	MOVW	a4+16(FP), R7
    48  	MOVW	a5+20(FP), R8
    49  	MOVW	a6+24(FP), R9
    50  	MOVW	R8, 16(R29)
    51  	MOVW	R9, 20(R29)
    52  	MOVW	trap+0(FP), R2	// syscall entry
    53  	SYSCALL
    54  	BEQ	R7, ok6
    55  	MOVW	$-1, R1
    56  	MOVW	R1, r1+28(FP)	// r1
    57  	MOVW	R0, r2+32(FP)	// r2
    58  	MOVW	R2, err+36(FP)	// errno
    59  	JAL	runtime·exitsyscall(SB)
    60  	RET
    61  ok6:
    62  	MOVW	R2, r1+28(FP)	// r1
    63  	MOVW	R3, r2+32(FP)	// r2
    64  	MOVW	R0, err+36(FP)	// errno
    65  	JAL	runtime·exitsyscall(SB)
    66  	RET
    67  
    68  // func Syscall9(trap trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, err uintptr);
    69  // Actually Syscall8 but the rest of the code expects it to be named Syscall9.
    70  TEXT ·Syscall9(SB),NOSPLIT,$28-52
    71  	NO_LOCAL_POINTERS
    72  	JAL	runtime·entersyscall(SB)
    73  	MOVW	a1+4(FP), R4
    74  	MOVW	a2+8(FP), R5
    75  	MOVW	a3+12(FP), R6
    76  	MOVW	a4+16(FP), R7
    77  	MOVW	a5+20(FP), R8
    78  	MOVW	a6+24(FP), R9
    79  	MOVW	a7+28(FP), R10
    80  	MOVW	a8+32(FP), R11
    81  	MOVW	R8, 16(R29)
    82  	MOVW	R9, 20(R29)
    83  	MOVW	R10, 24(R29)
    84  	MOVW	R11, 28(R29)
    85  	MOVW	trap+0(FP), R2	// syscall entry
    86  	SYSCALL
    87  	BEQ	R7, ok9
    88  	MOVW	$-1, R1
    89  	MOVW	R1, r1+40(FP)	// r1
    90  	MOVW	R0, r2+44(FP)	// r2
    91  	MOVW	R2, err+48(FP)	// errno
    92  	JAL	runtime·exitsyscall(SB)
    93  	RET
    94  ok9:
    95  	MOVW	R2, r1+40(FP)	// r1
    96  	MOVW	R3, r2+44(FP)	// r2
    97  	MOVW	R0, err+48(FP)	// errno
    98  	JAL	runtime·exitsyscall(SB)
    99  	RET
   100  
   101  TEXT ·RawSyscall(SB),NOSPLIT,$24-28
   102  	MOVW	a1+4(FP), R4
   103  	MOVW	a2+8(FP), R5
   104  	MOVW	a3+12(FP), R6
   105  	MOVW	trap+0(FP), R2	// syscall entry
   106  	SYSCALL
   107  	BEQ	R7, ok1
   108  	MOVW	$-1, R1
   109  	MOVW	R1, r1+16(FP)	// r1
   110  	MOVW	R0, r2+20(FP)	// r2
   111  	MOVW	R2, err+24(FP)	// errno
   112  	RET
   113  ok1:
   114  	MOVW	R2, r1+16(FP)	// r1
   115  	MOVW	R3, r2+20(FP)	// r2
   116  	MOVW	R0, err+24(FP)	// errno
   117  	RET
   118  
   119  TEXT ·RawSyscall6(SB),NOSPLIT,$20-40
   120  	MOVW	a1+4(FP), R4
   121  	MOVW	a2+8(FP), R5
   122  	MOVW	a3+12(FP), R6
   123  	MOVW	a4+16(FP), R7
   124  	MOVW	a5+20(FP), R8
   125  	MOVW	a6+24(FP), R9
   126  	MOVW	R8, 16(R29)
   127  	MOVW	R9, 20(R29)
   128  	MOVW	trap+0(FP), R2	// syscall entry
   129  	SYSCALL
   130  	BEQ	R7, ok2
   131  	MOVW	$-1, R1
   132  	MOVW	R1, r1+28(FP)	// r1
   133  	MOVW	R0, r2+32(FP)	// r2
   134  	MOVW	R2, err+36(FP)	// errno
   135  	RET
   136  ok2:
   137  	MOVW	R2, r1+28(FP)	// r1
   138  	MOVW	R3, r2+32(FP)	// r2
   139  	MOVW	R0, err+36(FP)	// errno
   140  	RET
   141  
   142  TEXT ·rawSyscallNoError(SB),NOSPLIT,$20-24
   143  	MOVW	a1+4(FP), R4
   144  	MOVW	a2+8(FP), R5
   145  	MOVW	a3+12(FP), R6
   146  	MOVW	trap+0(FP), R2	// syscall entry
   147  	SYSCALL
   148  	MOVW	R2, r1+16(FP)	// r1
   149  	MOVW	R3, r2+20(FP)	// r2
   150  	RET