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