Text file src/syscall/asm_darwin_arm64.s

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

View as plain text