asm_darwin_amd64.s raw

   1  // Copyright 2009 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  #include "funcdata.h"
   7  
   8  //
   9  // System call support for AMD64, Darwin
  10  //
  11  
  12  // Trap # in AX, args in DI SI DX, return in AX DX
  13  
  14  // func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno);
  15  TEXT	·Syscall(SB),NOSPLIT,$0-56
  16  	CALL	runtime·entersyscall<ABIInternal>(SB)
  17  	MOVQ	a1+8(FP), DI
  18  	MOVQ	a2+16(FP), SI
  19  	MOVQ	a3+24(FP), DX
  20  	MOVQ	trap+0(FP), AX	// syscall entry
  21  	ADDQ	$0x2000000, AX
  22  	SYSCALL
  23  	JCC	ok
  24  	MOVQ	$-1, r1+32(FP)
  25  	MOVQ	$0, r2+40(FP)
  26  	MOVQ	AX, err+48(FP)
  27  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  28  	RET
  29  ok:
  30  	MOVQ	AX, r1+32(FP)
  31  	MOVQ	DX, r2+40(FP)
  32  	MOVQ	$0, err+48(FP)
  33  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  34  	RET
  35  
  36  // func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno);
  37  TEXT	·Syscall6(SB),NOSPLIT,$0-80
  38  	CALL	runtime·entersyscall<ABIInternal>(SB)
  39  	MOVQ	a1+8(FP), DI
  40  	MOVQ	a2+16(FP), SI
  41  	MOVQ	a3+24(FP), DX
  42  	MOVQ	a4+32(FP), R10
  43  	MOVQ	a5+40(FP), R8
  44  	MOVQ	a6+48(FP), R9
  45  	MOVQ	trap+0(FP), AX	// syscall entry
  46  	ADDQ	$0x2000000, AX
  47  	SYSCALL
  48  	JCC	ok6
  49  	MOVQ	$-1, r1+56(FP)
  50  	MOVQ	$0, r2+64(FP)
  51  	MOVQ	AX, err+72(FP)
  52  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  53  	RET
  54  ok6:
  55  	MOVQ	AX, r1+56(FP)
  56  	MOVQ	DX, r2+64(FP)
  57  	MOVQ	$0, err+72(FP)
  58  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  59  	RET
  60  
  61  // func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
  62  TEXT	·Syscall9(SB),NOSPLIT,$0-104
  63  	CALL	runtime·entersyscall<ABIInternal>(SB)
  64  	MOVQ	trap+0(FP), AX	// syscall entry
  65  	MOVQ	a1+8(FP), DI
  66  	MOVQ	a2+16(FP), SI
  67  	MOVQ	a3+24(FP), DX
  68  	MOVQ	a4+32(FP), R10
  69  	MOVQ	a5+40(FP), R8
  70  	MOVQ	a6+48(FP), R9
  71  	MOVQ	a7+56(FP), R11
  72  	MOVQ	a8+64(FP), R12
  73  	MOVQ	a9+72(FP), R13
  74  	SUBQ	$32, SP
  75  	MOVQ	R11, 8(SP)
  76  	MOVQ	R12, 16(SP)
  77  	MOVQ	R13, 24(SP)
  78  	ADDQ	$0x2000000, AX
  79  	SYSCALL
  80  	JCC	ok9
  81  	ADDQ	$32, SP
  82  	MOVQ	$-1, r1+80(FP)
  83  	MOVQ	$0, r2+88(FP)
  84  	MOVQ	AX, err+96(FP)
  85  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  86  	RET
  87  ok9:
  88  	ADDQ	$32, SP
  89  	MOVQ	AX, r1+80(FP)
  90  	MOVQ	DX, r2+88(FP)
  91  	MOVQ	$0, err+96(FP)
  92  	CALL	runtime·exitsyscall<ABIInternal>(SB)
  93  	RET
  94  
  95  // func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
  96  TEXT ·RawSyscall(SB),NOSPLIT,$0-56
  97  	MOVQ	a1+8(FP), DI
  98  	MOVQ	a2+16(FP), SI
  99  	MOVQ	a3+24(FP), DX
 100  	MOVQ	trap+0(FP), AX	// syscall entry
 101  	ADDQ	$0x2000000, AX
 102  	SYSCALL
 103  	JCC	ok1
 104  	MOVQ	$-1, r1+32(FP)
 105  	MOVQ	$0, r2+40(FP)
 106  	MOVQ	AX, err+48(FP)
 107  	RET
 108  ok1:
 109  	MOVQ	AX, r1+32(FP)
 110  	MOVQ	DX, r2+40(FP)
 111  	MOVQ	$0, err+48(FP)
 112  	RET
 113  
 114  // func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 115  TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
 116  	MOVQ	a1+8(FP), DI
 117  	MOVQ	a2+16(FP), SI
 118  	MOVQ	a3+24(FP), DX
 119  	MOVQ	a4+32(FP), R10
 120  	MOVQ	a5+40(FP), R8
 121  	MOVQ	a6+48(FP), R9
 122  	MOVQ	trap+0(FP), AX	// syscall entry
 123  	ADDQ	$0x2000000, AX
 124  	SYSCALL
 125  	JCC	ok2
 126  	MOVQ	$-1, r1+56(FP)
 127  	MOVQ	$0, r2+64(FP)
 128  	MOVQ	AX, err+72(FP)
 129  	RET
 130  ok2:
 131  	MOVQ	AX, r1+56(FP)
 132  	MOVQ	DX, r2+64(FP)
 133  	MOVQ	$0, err+72(FP)
 134  	RET
 135