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