github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/syscall/asm_openbsd_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, OpenBSD
     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	8(SP), AX	// syscall entry
    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  	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	8(SP), AX	// syscall entry
    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  	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	// syscall entry
    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  	MOVQ	64(SP), R11
    72  	MOVQ	72(SP), R12
    73  	MOVQ	80(SP), R13
    74  	SUBQ    $32, SP
    75  	MOVQ	R11, 8(SP)	// arg 7
    76  	MOVQ	R12, 16(SP)	// arg 8
    77  	MOVQ	R13, 24(SP)	// arg 9
    78  	SYSCALL
    79  	JCC	ok9
    80  	ADDQ    $32, SP
    81  	MOVQ	$-1, 88(SP)	// r1
    82  	MOVQ	$0, 96(SP)	// r2
    83  	MOVQ	AX, 104(SP)	// errno
    84  	CALL	runtime·exitsyscall(SB)
    85  	RET
    86  ok9:
    87  	ADDQ    $32, SP
    88  	MOVQ	AX, 88(SP)	// r1
    89  	MOVQ	DX, 96(SP)	// r2
    90  	MOVQ	$0, 104(SP)	// errno
    91  	CALL	runtime·exitsyscall(SB)
    92  	RET
    93  
    94  TEXT	·RawSyscall(SB),NOSPLIT,$0-64
    95  	MOVQ	16(SP), DI
    96  	MOVQ	24(SP), SI
    97  	MOVQ	32(SP), DX
    98  	MOVQ	$0, R10
    99  	MOVQ	$0, R8
   100  	MOVQ	$0, R9
   101  	MOVQ	8(SP), AX	// syscall entry
   102  	SYSCALL
   103  	JCC	ok1
   104  	MOVQ	$-1, 40(SP)	// r1
   105  	MOVQ	$0, 48(SP)	// r2
   106  	MOVQ	AX, 56(SP)	// errno
   107  	RET
   108  ok1:
   109  	MOVQ	AX, 40(SP)	// r1
   110  	MOVQ	DX, 48(SP)	// r2
   111  	MOVQ	$0, 56(SP)	// errno
   112  	RET
   113  
   114  TEXT	·RawSyscall6(SB),NOSPLIT,$0-88
   115  	MOVQ	16(SP), DI
   116  	MOVQ	24(SP), SI
   117  	MOVQ	32(SP), DX
   118  	MOVQ	40(SP), R10
   119  	MOVQ	48(SP), R8
   120  	MOVQ	56(SP), R9
   121  	MOVQ	8(SP), AX	// syscall entry
   122  	SYSCALL
   123  	JCC	ok2
   124  	MOVQ	$-1, 64(SP)	// r1
   125  	MOVQ	$0, 72(SP)	// r2
   126  	MOVQ	AX, 80(SP)	// errno
   127  	RET
   128  ok2:
   129  	MOVQ	AX, 64(SP)	// r1
   130  	MOVQ	DX, 72(SP)	// r2
   131  	MOVQ	$0, 80(SP)	// errno
   132  	RET