github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/syscall/asm_dragonfly_386.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 386, FreeBSD
    10  //
    11  
    12  // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
    13  // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
    14  // Trap # in AX, args on stack above caller pc.
    15  
    16  TEXT	·Syscall(SB),NOSPLIT,$0-32
    17  	CALL	runtime·entersyscall(SB)
    18  	MOVL	4(SP), AX	// syscall entry
    19  	// slide args down on top of system call number
    20  	LEAL		8(SP), SI
    21  	LEAL		4(SP), DI
    22  	CLD
    23  	MOVSL
    24  	MOVSL
    25  	MOVSL
    26  	INT	$0x80
    27  	JAE	ok
    28  	MOVL	$-1, 20(SP)	// r1
    29  	MOVL	$-1, 24(SP)	// r2
    30  	MOVL	AX, 28(SP)		// errno
    31  	CALL	runtime·exitsyscall(SB)
    32  	RET
    33  ok:
    34  	MOVL	AX, 20(SP)	// r1
    35  	MOVL	DX, 24(SP)	// r2
    36  	MOVL	$0, 28(SP)	// errno
    37  	CALL	runtime·exitsyscall(SB)
    38  	RET
    39  
    40  TEXT	·Syscall6(SB),NOSPLIT,$0-44
    41  	CALL	runtime·entersyscall(SB)
    42  	MOVL	4(SP), AX	// syscall entry
    43  	// slide args down on top of system call number
    44  	LEAL		8(SP), SI
    45  	LEAL		4(SP), DI
    46  	CLD
    47  	MOVSL
    48  	MOVSL
    49  	MOVSL
    50  	MOVSL
    51  	MOVSL
    52  	MOVSL
    53  	INT	$0x80
    54  	JAE	ok6
    55  	MOVL	$-1, 32(SP)	// r1
    56  	MOVL	$-1, 36(SP)	// r2
    57  	MOVL	AX, 40(SP)		// errno
    58  	CALL	runtime·exitsyscall(SB)
    59  	RET
    60  ok6:
    61  	MOVL	AX, 32(SP)	// r1
    62  	MOVL	DX, 36(SP)	// r2
    63  	MOVL	$0, 40(SP)	// errno
    64  	CALL	runtime·exitsyscall(SB)
    65  	RET
    66  
    67  TEXT	·Syscall9(SB),NOSPLIT,$0-56
    68  	CALL	runtime·entersyscall(SB)
    69  	MOVL	4(SP), AX	// syscall entry
    70  	// slide args down on top of system call number
    71  	LEAL		8(SP), SI
    72  	LEAL		4(SP), DI
    73  	CLD
    74  	MOVSL
    75  	MOVSL
    76  	MOVSL
    77  	MOVSL
    78  	MOVSL
    79  	MOVSL
    80  	MOVSL
    81  	MOVSL
    82  	MOVSL
    83  	INT	$0x80
    84  	JAE	ok9
    85  	MOVL	$-1, 44(SP)	// r1
    86  	MOVL	$-1, 48(SP)	// r2
    87  	MOVL	AX, 52(SP)		// errno
    88  	CALL	runtime·exitsyscall(SB)
    89  	RET
    90  ok9:
    91  	MOVL	AX, 44(SP)	// r1
    92  	MOVL	DX, 48(SP)	// r2
    93  	MOVL	$0, 52(SP)	// errno
    94  	CALL	runtime·exitsyscall(SB)
    95  	RET
    96  
    97  TEXT ·RawSyscall(SB),NOSPLIT,$0-32
    98  	MOVL	4(SP), AX	// syscall entry
    99  	// slide args down on top of system call number
   100  	LEAL		8(SP), SI
   101  	LEAL		4(SP), DI
   102  	CLD
   103  	MOVSL
   104  	MOVSL
   105  	MOVSL
   106  	INT	$0x80
   107  	JAE	ok1
   108  	MOVL	$-1, 20(SP)	// r1
   109  	MOVL	$-1, 24(SP)	// r2
   110  	MOVL	AX, 28(SP)		// errno
   111  	RET
   112  ok1:
   113  	MOVL	AX, 20(SP)	// r1
   114  	MOVL	DX, 24(SP)	// r2
   115  	MOVL	$0, 28(SP)	// errno
   116  	RET
   117  
   118  TEXT	·RawSyscall6(SB),NOSPLIT,$0-44
   119  	MOVL	4(SP), AX	// syscall entry
   120  	// slide args down on top of system call number
   121  	LEAL		8(SP), SI
   122  	LEAL		4(SP), DI
   123  	CLD
   124  	MOVSL
   125  	MOVSL
   126  	MOVSL
   127  	MOVSL
   128  	MOVSL
   129  	MOVSL
   130  	INT	$0x80
   131  	JAE	ok2
   132  	MOVL	$-1, 32(SP)	// r1
   133  	MOVL	$-1, 36(SP)	// r2
   134  	MOVL	AX, 40(SP)		// errno
   135  	RET
   136  ok2:
   137  	MOVL	AX, 32(SP)	// r1
   138  	MOVL	DX, 36(SP)	// r2
   139  	MOVL	$0, 40(SP)	// errno
   140  	RET