asm_netbsd_arm64.s raw

   1  // Copyright 2019 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 call support for ARM64, NetBSD
   9  //
  10  
  11  #define	SYS_syscall	0
  12  
  13  // func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr)
  14  TEXT	·Syscall(SB),NOSPLIT,$0-56
  15  	BL	runtime·entersyscall<ABIInternal>(SB)
  16  	MOVD	trap+0(FP), R17
  17  	MOVD	a1+8(FP), R0
  18  	MOVD	a2+16(FP), R1
  19  	MOVD	a3+24(FP), R2
  20  	SVC	$SYS_syscall
  21  	BCC	ok
  22  	MOVD	$-1, R1
  23  	MOVD	R1, r1+32(FP)	// r1
  24  	MOVD	ZR, r2+40(FP)	// r2
  25  	MOVD	R0, err+48(FP)	// err
  26  	BL	runtime·exitsyscall<ABIInternal>(SB)
  27  	RET
  28  ok:
  29  	MOVD	R0, r1+32(FP) // r1
  30  	MOVD	R1, r2+40(FP)	// r2
  31  	MOVD	ZR, err+48(FP)	// err
  32  	BL	runtime·exitsyscall<ABIInternal>(SB)
  33  	RET
  34  
  35  // func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr)
  36  TEXT ·RawSyscall(SB),NOSPLIT,$0-56
  37  	MOVD	trap+0(FP), R17	// syscall entry
  38  	MOVD	a1+8(FP), R0
  39  	MOVD	a2+16(FP), R1
  40  	MOVD	a3+24(FP), R2
  41  	SVC	$SYS_syscall
  42  	BCC	ok
  43  	MOVD	$-1, R1
  44  	MOVD	R1, r1+32(FP)	// r1
  45  	MOVD	ZR, r2+40(FP)	// r2
  46  	MOVD	R0, err+48(FP)	// err
  47  	RET
  48  ok:
  49  	MOVD	R0, r1+32(FP) // r1
  50  	MOVD	R1, r2+40(FP)	// r2
  51  	MOVD	ZR, err+48(FP)	// err
  52  	RET
  53  
  54  // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
  55  TEXT	·Syscall6(SB),NOSPLIT,$0-80
  56  	BL	runtime·entersyscall<ABIInternal>(SB)
  57  	MOVD	trap+0(FP), R17	// syscall entry
  58  	MOVD	a1+8(FP), R0
  59  	MOVD	a2+16(FP), R1
  60  	MOVD	a3+24(FP), R2
  61  	MOVD	a4+32(FP), R3
  62  	MOVD	a5+40(FP), R4
  63  	MOVD	a6+48(FP), R5
  64  	SVC	$SYS_syscall
  65  	BCC	ok
  66  	MOVD	$-1, R1
  67  	MOVD	R1, r1+56(FP)	// r1
  68  	MOVD	ZR, r2+64(FP)	// r2
  69  	MOVD	R0, err+72(FP)	// err
  70  	BL	runtime·exitsyscall<ABIInternal>(SB)
  71  	RET
  72  ok:
  73  	MOVD	R0, r1+56(FP) // r1
  74  	MOVD	R1, r2+64(FP)	// r2
  75  	MOVD	ZR, err+72(FP)	// err
  76  	BL	runtime·exitsyscall<ABIInternal>(SB)
  77  	RET
  78  
  79  // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
  80  TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
  81  	MOVD	trap+0(FP), R17	// syscall entry
  82  	MOVD	a1+8(FP), R0
  83  	MOVD	a2+16(FP), R1
  84  	MOVD	a3+24(FP), R2
  85  	MOVD	a4+32(FP), R3
  86  	MOVD	a5+40(FP), R4
  87  	MOVD	a6+48(FP), R5
  88  	SVC	$SYS_syscall
  89  	BCC	ok
  90  	MOVD	$-1, R1
  91  	MOVD	R1, r1+56(FP)	// r1
  92  	MOVD	ZR, r2+64(FP)	// r2
  93  	MOVD	R0, err+72(FP)	// err
  94  	RET
  95  ok:
  96  	MOVD	R0, r1+56(FP) // r1
  97  	MOVD	R1, r2+64(FP)	// r2
  98  	MOVD	ZR, R0
  99  	MOVD	R0, err+72(FP)	// err
 100  	RET
 101  
 102  // Actually Syscall7
 103  TEXT	·Syscall9(SB),NOSPLIT,$0-104
 104  	BL	runtime·entersyscall<ABIInternal>(SB)
 105  	MOVD	num+0(FP), R17	// syscall entry
 106  	MOVD	a1+8(FP), R0
 107  	MOVD	a2+16(FP), R1
 108  	MOVD	a3+24(FP), R2
 109  	MOVD	a4+32(FP), R3
 110  	MOVD	a5+40(FP), R4
 111  	MOVD	a6+48(FP), R5
 112  	MOVD	a7+56(FP), R6
 113  	//MOVD	a8+64(FP), R7
 114  	//MOVD	a9+72(FP), R8
 115  	SVC	$SYS_syscall
 116  	BCC	ok
 117  	MOVD	$-1, R1
 118  	MOVD	R1, r1+80(FP)	// r1
 119  	MOVD	ZR, r2+88(FP)	// r2
 120  	MOVD	R0, err+96(FP)	// err
 121  	BL	runtime·exitsyscall<ABIInternal>(SB)
 122  	RET
 123  ok:
 124  	MOVD	R0, r1+80(FP) // r1
 125  	MOVD	R1, r2+88(FP)	// r2
 126  	MOVD	ZR, err+96(FP)	// err
 127  	BL	runtime·exitsyscall<ABIInternal>(SB)
 128  	RET
 129