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