asm_openbsd_mips64.s raw

   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);
   8  TEXT ·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
  25  ok:
  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  
  32  TEXT ·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
  49  ok6:
  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.
  59  TEXT	·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
  82  ok9:
  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  
  89  TEXT ·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
 104  ok1:
 105  	MOVV	R2, r1+32(FP)	// r1
 106  	MOVV	R3, r2+40(FP)	// r2
 107  	MOVV	R0, err+48(FP)	// errno
 108  	RET
 109  
 110  TEXT ·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
 125  ok2:
 126  	MOVV	R2, r1+56(FP)	// r1
 127  	MOVV	R3, r2+64(FP)	// r2
 128  	MOVV	R0, err+72(FP)	// errno
 129  	RET
 130