...

Text file src/syscall/asm_unix_amd64.s

Documentation: syscall

     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//go:build dragonfly || freebsd || netbsd
     6
     7#include "textflag.h"
     8#include "funcdata.h"
     9
    10//
    11// System call support for AMD64 unixes
    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
    18TEXT	·Syscall(SB),NOSPLIT,$0-56
    19	CALL	runtime·entersyscall<ABIInternal>(SB)
    20	MOVQ	trap+0(FP), AX	// syscall entry
    21	MOVQ	a1+8(FP), DI
    22	MOVQ	a2+16(FP), SI
    23	MOVQ	a3+24(FP), DX
    24	SYSCALL
    25	JCC	ok
    26	MOVQ	$-1, r1+32(FP)	// r1
    27	MOVQ	$0, r2+40(FP)	// r2
    28	MOVQ	AX, err+48(FP)	// errno
    29	CALL	runtime·exitsyscall<ABIInternal>(SB)
    30	RET
    31ok:
    32	MOVQ	AX, r1+32(FP)	// r1
    33	MOVQ	DX, r2+40(FP)	// r2
    34	MOVQ	$0, err+48(FP)	// errno
    35	CALL	runtime·exitsyscall<ABIInternal>(SB)
    36	RET
    37
    38TEXT	·Syscall6(SB),NOSPLIT,$0-80
    39	CALL	runtime·entersyscall<ABIInternal>(SB)
    40	MOVQ	trap+0(FP), AX	// syscall entry
    41	MOVQ	a1+8(FP), DI
    42	MOVQ	a2+16(FP), SI
    43	MOVQ	a3+24(FP), DX
    44	MOVQ	a4+32(FP), R10
    45	MOVQ	a5+40(FP), R8
    46	MOVQ	a6+48(FP), R9
    47	SYSCALL
    48	JCC	ok6
    49	MOVQ	$-1, r1+56(FP)	// r1
    50	MOVQ	$0, r2+64(FP)	// r2
    51	MOVQ	AX, err+72(FP)  // errno
    52	CALL	runtime·exitsyscall<ABIInternal>(SB)
    53	RET
    54ok6:
    55	MOVQ	AX, r1+56(FP)	// r1
    56	MOVQ	DX, r2+64(FP)	// r2
    57	MOVQ	$0, err+72(FP)	// errno
    58	CALL	runtime·exitsyscall<ABIInternal>(SB)
    59	RET
    60
    61TEXT	·RawSyscall(SB),NOSPLIT,$0-56
    62	MOVQ	a1+8(FP), DI
    63	MOVQ	a2+16(FP), SI
    64	MOVQ	a3+24(FP), DX
    65	MOVQ	trap+0(FP), AX	// syscall entry
    66	SYSCALL
    67	JCC	ok1
    68	MOVQ	$-1, r1+32(FP)	// r1
    69	MOVQ	$0, r2+40(FP)	// r2
    70	MOVQ	AX, err+48(FP)	// errno
    71	RET
    72ok1:
    73	MOVQ	AX, r1+32(FP)	// r1
    74	MOVQ	DX, r2+40(FP)	// r2
    75	MOVQ	$0, err+48(FP)	// errno
    76	RET
    77
    78TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
    79	MOVQ	a1+8(FP), DI
    80	MOVQ	a2+16(FP), SI
    81	MOVQ	a3+24(FP), DX
    82	MOVQ	a4+32(FP), R10
    83	MOVQ	a5+40(FP), R8
    84	MOVQ	a6+48(FP), R9
    85	MOVQ	trap+0(FP), AX	// syscall entry
    86	SYSCALL
    87	JCC	ok2
    88	MOVQ	$-1, r1+56(FP)	// r1
    89	MOVQ	$0, r2+64(FP)	// r2
    90	MOVQ	AX, err+72(FP)	// errno
    91	RET
    92ok2:
    93	MOVQ	AX, r1+56(FP)	// r1
    94	MOVQ	DX, r2+64(FP)	// r2
    95	MOVQ	$0, err+72(FP)	// errno
    96	RET

View as plain text