github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/syscall/asm_darwin_amd64.s (about)

     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  // TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
     6  // so that go vet can check that they are correct.
     7  
     8  #include "textflag.h"
     9  #include "funcdata.h"
    10  
    11  //
    12  // System call support for AMD64, Darwin
    13  //
    14  
    15  // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
    16  // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
    17  // Trap # in AX, args in DI SI DX, return in AX DX
    18  
    19  TEXT	·Syscall(SB),NOSPLIT,$0-56
    20  	CALL	runtime·entersyscall(SB)
    21  	MOVQ	16(SP), DI
    22  	MOVQ	24(SP), SI
    23  	MOVQ	32(SP), DX
    24  	MOVQ	$0, R10
    25  	MOVQ	$0, R8
    26  	MOVQ	$0, R9
    27  	MOVQ	8(SP), AX	// syscall entry
    28  	ADDQ	$0x2000000, AX
    29  	SYSCALL
    30  	JCC	ok
    31  	MOVQ	$-1, 40(SP)	// r1
    32  	MOVQ	$0, 48(SP)	// r2
    33  	MOVQ	AX, 56(SP)  // errno
    34  	CALL	runtime·exitsyscall(SB)
    35  	RET
    36  ok:
    37  	MOVQ	AX, 40(SP)	// r1
    38  	MOVQ	DX, 48(SP)	// r2
    39  	MOVQ	$0, 56(SP)	// errno
    40  	CALL	runtime·exitsyscall(SB)
    41  	RET
    42  
    43  TEXT	·Syscall6(SB),NOSPLIT,$0-80
    44  	CALL	runtime·entersyscall(SB)
    45  	MOVQ	16(SP), DI
    46  	MOVQ	24(SP), SI
    47  	MOVQ	32(SP), DX
    48  	MOVQ	40(SP), R10
    49  	MOVQ	48(SP), R8
    50  	MOVQ	56(SP), R9
    51  	MOVQ	8(SP), AX	// syscall entry
    52  	ADDQ	$0x2000000, AX
    53  	SYSCALL
    54  	JCC	ok6
    55  	MOVQ	$-1, 64(SP)	// r1
    56  	MOVQ	$0, 72(SP)	// r2
    57  	MOVQ	AX, 80(SP)  // errno
    58  	CALL	runtime·exitsyscall(SB)
    59  	RET
    60  ok6:
    61  	MOVQ	AX, 64(SP)	// r1
    62  	MOVQ	DX, 72(SP)	// r2
    63  	MOVQ	$0, 80(SP)	// errno
    64  	CALL	runtime·exitsyscall(SB)
    65  	RET
    66  
    67  TEXT ·RawSyscall(SB),NOSPLIT,$0-56
    68  	MOVQ	16(SP), DI
    69  	MOVQ	24(SP), SI
    70  	MOVQ	32(SP), DX
    71  	MOVQ	$0, R10
    72  	MOVQ	$0, R8
    73  	MOVQ	$0, R9
    74  	MOVQ	8(SP), AX	// syscall entry
    75  	ADDQ	$0x2000000, AX
    76  	SYSCALL
    77  	JCC	ok1
    78  	MOVQ	$-1, 40(SP)	// r1
    79  	MOVQ	$0, 48(SP)	// r2
    80  	MOVQ	AX, 56(SP)  // errno
    81  	RET
    82  ok1:
    83  	MOVQ	AX, 40(SP)	// r1
    84  	MOVQ	DX, 48(SP)	// r2
    85  	MOVQ	$0, 56(SP)	// errno
    86  	RET
    87  
    88  TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
    89  	MOVQ	16(SP), DI
    90  	MOVQ	24(SP), SI
    91  	MOVQ	32(SP), DX
    92  	MOVQ	40(SP), R10
    93  	MOVQ	48(SP), R8
    94  	MOVQ	56(SP), R9
    95  	MOVQ	8(SP), AX	// syscall entry
    96  	ADDQ	$0x2000000, AX
    97  	SYSCALL
    98  	JCC	ok2
    99  	MOVQ	$-1, 64(SP)	// r1
   100  	MOVQ	$0, 72(SP)	// r2
   101  	MOVQ	AX, 80(SP)  // errno
   102  	RET
   103  ok2:
   104  	MOVQ	AX, 64(SP)	// r1
   105  	MOVQ	DX, 72(SP)	// r2
   106  	MOVQ	$0, 80(SP)	// errno
   107  	RET