...

Text file src/pkg/syscall/asm_darwin_amd64.s

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

View as plain text