github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/syscall/asm_dragonfly_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  #include "textflag.h"
     6  #include "funcdata.h"
     7  
     8  //
     9  // System call support for AMD64, DragonFly
    10  //
    11  
    12  // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
    13  // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
    14  // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64)
    15  // Trap # in AX, args in DI SI DX, return in AX DX
    16  
    17  TEXT	·Syscall(SB),NOSPLIT,$0-64
    18  	CALL	runtime·entersyscall(SB)
    19  	MOVQ	16(SP), DI
    20  	MOVQ	24(SP), SI
    21  	MOVQ	32(SP), DX
    22  	MOVQ	$0, R10
    23  	MOVQ	$0, R8
    24  	MOVQ	$0, R9
    25  	MOVQ	8(SP), AX	// syscall entry
    26  	SYSCALL
    27  	JCC	ok
    28  	MOVQ	$-1, 40(SP)	// r1
    29  	MOVQ	$0, 48(SP)	// r2
    30  	MOVQ	AX, 56(SP)  // errno
    31  	CALL	runtime·exitsyscall(SB)
    32  	RET
    33  ok:
    34  	MOVQ	AX, 40(SP)	// r1
    35  	MOVQ	DX, 48(SP)	// r2
    36  	MOVQ	$0, 56(SP)	// errno
    37  	CALL	runtime·exitsyscall(SB)
    38  	RET
    39  
    40  TEXT	·Syscall6(SB),NOSPLIT,$0-88
    41  	CALL	runtime·entersyscall(SB)
    42  	MOVQ	16(SP), DI
    43  	MOVQ	24(SP), SI
    44  	MOVQ	32(SP), DX
    45  	MOVQ	40(SP), R10
    46  	MOVQ	48(SP), R8
    47  	MOVQ	56(SP), R9
    48  	MOVQ	8(SP), AX	// syscall entry
    49  	SYSCALL
    50  	JCC	ok6
    51  	MOVQ	$-1, 64(SP)	// r1
    52  	MOVQ	$0, 72(SP)	// r2
    53  	MOVQ	AX, 80(SP)  // errno
    54  	CALL	runtime·exitsyscall(SB)
    55  	RET
    56  ok6:
    57  	MOVQ	AX, 64(SP)	// r1
    58  	MOVQ	DX, 72(SP)	// r2
    59  	MOVQ	$0, 80(SP)	// errno
    60  	CALL	runtime·exitsyscall(SB)
    61  	RET
    62  
    63  TEXT	·Syscall9(SB),NOSPLIT,$0-112
    64  	CALL	runtime·entersyscall(SB)
    65  	MOVQ	8(SP), AX
    66  	MOVQ	16(SP), DI
    67  	MOVQ	24(SP), SI
    68  	MOVQ	32(SP), DX
    69  	MOVQ	40(SP),	R10
    70  	MOVQ	48(SP), R8
    71  	MOVQ	56(SP), R9
    72  
    73  	// shift around the last three arguments so they're at the
    74  	// top of the stack when the syscall is called.
    75  	MOVQ	64(SP), R11 // arg 7
    76  	MOVQ	R11, 8(SP)
    77  	MOVQ	72(SP), R11 // arg 8
    78  	MOVQ	R11, 16(SP)
    79  	MOVQ	80(SP), R11 // arg 9
    80  	MOVQ	R11, 24(SP)
    81  
    82  	SYSCALL
    83  	JCC	ok9
    84  	MOVQ	$-1, 88(SP)	// r1
    85  	MOVQ	$0, 96(SP)	// r2
    86  	MOVQ	AX, 104(SP)  // errno
    87  	CALL	runtime·exitsyscall(SB)
    88  	RET
    89  ok9:
    90  	MOVQ	AX, 88(SP)	// r1
    91  	MOVQ	DX, 96(SP)	// r2
    92  	MOVQ	$0, 104(SP)	// errno
    93  	CALL	runtime·exitsyscall(SB)
    94  	RET
    95  
    96  TEXT ·RawSyscall(SB),NOSPLIT,$0-64
    97  	MOVQ	16(SP), DI
    98  	MOVQ	24(SP), SI
    99  	MOVQ	32(SP), DX
   100  	MOVQ	$0, R10
   101  	MOVQ	$0, R8
   102  	MOVQ	$0, R9
   103  	MOVQ	8(SP), AX	// syscall entry
   104  	SYSCALL
   105  	JCC	ok1
   106  	MOVQ	$-1, 40(SP)	// r1
   107  	MOVQ	$0, 48(SP)	// r2
   108  	MOVQ	AX, 56(SP)  // errno
   109  	RET
   110  ok1:
   111  	MOVQ	AX, 40(SP)	// r1
   112  	MOVQ	DX, 48(SP)	// r2
   113  	MOVQ	$0, 56(SP)	// errno
   114  	RET
   115  
   116  TEXT	·RawSyscall6(SB),NOSPLIT,$0-88
   117  	MOVQ	16(SP), DI
   118  	MOVQ	24(SP), SI
   119  	MOVQ	32(SP), DX
   120  	MOVQ	40(SP), R10
   121  	MOVQ	48(SP), R8
   122  	MOVQ	56(SP), R9
   123  	MOVQ	8(SP), AX	// syscall entry
   124  	SYSCALL
   125  	JCC	ok2
   126  	MOVQ	$-1, 64(SP)	// r1
   127  	MOVQ	$0, 72(SP)	// r2
   128  	MOVQ	AX, 80(SP)  // errno
   129  	RET
   130  ok2:
   131  	MOVQ	AX, 64(SP)	// r1
   132  	MOVQ	DX, 72(SP)	// r2
   133  	MOVQ	$0, 80(SP)	// errno
   134  	RET