github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_linux_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 calls for AMD64, Linux
    12  //
    13  
    14  // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
    15  // Trap # in AX, args in DI SI DX R10 R8 R9, return in AX DX
    16  // Note that this differs from "standard" ABI convention, which
    17  // would pass 4th arg in CX, not R10.
    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  	SYSCALL
    29  	CMPQ	AX, $0xfffffffffffff001
    30  	JLS	ok
    31  	MOVQ	$-1, 40(SP)	// r1
    32  	MOVQ	$0, 48(SP)	// r2
    33  	NEGQ	AX
    34  	MOVQ	AX, 56(SP)  // errno
    35  	CALL	runtime·exitsyscall(SB)
    36  	RET
    37  ok:
    38  	MOVQ	AX, 40(SP)	// r1
    39  	MOVQ	DX, 48(SP)	// r2
    40  	MOVQ	$0, 56(SP)	// errno
    41  	CALL	runtime·exitsyscall(SB)
    42  	RET
    43  
    44  TEXT ·Syscall6(SB),NOSPLIT,$0-80
    45  	CALL	runtime·entersyscall(SB)
    46  	MOVQ	16(SP), DI
    47  	MOVQ	24(SP), SI
    48  	MOVQ	32(SP), DX
    49  	MOVQ	40(SP), R10
    50  	MOVQ	48(SP), R8
    51  	MOVQ	56(SP), R9
    52  	MOVQ	8(SP), AX	// syscall entry
    53  	SYSCALL
    54  	CMPQ	AX, $0xfffffffffffff001
    55  	JLS	ok6
    56  	MOVQ	$-1, 64(SP)	// r1
    57  	MOVQ	$0, 72(SP)	// r2
    58  	NEGQ	AX
    59  	MOVQ	AX, 80(SP)  // errno
    60  	CALL	runtime·exitsyscall(SB)
    61  	RET
    62  ok6:
    63  	MOVQ	AX, 64(SP)	// r1
    64  	MOVQ	DX, 72(SP)	// r2
    65  	MOVQ	$0, 80(SP)	// errno
    66  	CALL	runtime·exitsyscall(SB)
    67  	RET
    68  
    69  TEXT ·RawSyscall(SB),NOSPLIT,$0-56
    70  	MOVQ	16(SP), DI
    71  	MOVQ	24(SP), SI
    72  	MOVQ	32(SP), DX
    73  	MOVQ	$0, R10
    74  	MOVQ	$0, R8
    75  	MOVQ	$0, R9
    76  	MOVQ	8(SP), AX	// syscall entry
    77  	SYSCALL
    78  	CMPQ	AX, $0xfffffffffffff001
    79  	JLS	ok1
    80  	MOVQ	$-1, 40(SP)	// r1
    81  	MOVQ	$0, 48(SP)	// r2
    82  	NEGQ	AX
    83  	MOVQ	AX, 56(SP)  // errno
    84  	RET
    85  ok1:
    86  	MOVQ	AX, 40(SP)	// r1
    87  	MOVQ	DX, 48(SP)	// r2
    88  	MOVQ	$0, 56(SP)	// errno
    89  	RET
    90  
    91  TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
    92  	MOVQ	16(SP), DI
    93  	MOVQ	24(SP), SI
    94  	MOVQ	32(SP), DX
    95  	MOVQ	40(SP), R10
    96  	MOVQ	48(SP), R8
    97  	MOVQ	56(SP), R9
    98  	MOVQ	8(SP), AX	// syscall entry
    99  	SYSCALL
   100  	CMPQ	AX, $0xfffffffffffff001
   101  	JLS	ok2
   102  	MOVQ	$-1, 64(SP)	// r1
   103  	MOVQ	$0, 72(SP)	// r2
   104  	NEGQ	AX
   105  	MOVQ	AX, 80(SP)  // errno
   106  	RET
   107  ok2:
   108  	MOVQ	AX, 64(SP)	// r1
   109  	MOVQ	DX, 72(SP)	// r2
   110  	MOVQ	$0, 80(SP)	// errno
   111  	RET
   112  
   113  TEXT ·gettimeofday(SB),NOSPLIT,$0-16
   114  	MOVQ	8(SP), DI
   115  	MOVQ	$0, SI
   116  	MOVQ	runtime·__vdso_gettimeofday_sym(SB), AX
   117  	CALL	AX
   118  
   119  	CMPQ	AX, $0xfffffffffffff001
   120  	JLS	ok7
   121  	NEGQ	AX
   122  	MOVQ	AX, 16(SP)  // errno
   123  	RET
   124  ok7:
   125  	MOVQ	$0, 16(SP)  // errno
   126  	RET