github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_plan9_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  // 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 386, Plan 9
    12  //
    13  
    14  //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
    15  //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
    16  //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
    17  //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
    18  
    19  // Trap # in AX, args on stack above caller pc.
    20  TEXT	·Syscall(SB),NOSPLIT,$0-32
    21  	CALL	runtime·entersyscall(SB)
    22  	MOVL	4(SP), AX	// syscall entry
    23  	// slide args down on top of system call number
    24  	LEAL		8(SP), SI
    25  	LEAL		4(SP), DI
    26  	CLD
    27  	MOVSL
    28  	MOVSL
    29  	MOVSL
    30  	INT	$64
    31  	MOVL	AX, r1+20(SP)
    32  	MOVL	$0, r2+24(SP)
    33  	CMPL	AX, $-1
    34  	JNE	ok3
    35  
    36  	SUBL	$8, SP
    37  	CALL	runtime·errstr(SB)
    38  	MOVL	SP, SI
    39  	ADDL	$8, SP
    40  	JMP	copyresult3
    41  	
    42  ok3:
    43  	LEAL	runtime·emptystring(SB), SI	
    44  	
    45  copyresult3:
    46  	LEAL	err+28(SP), DI
    47  
    48  	CLD
    49  	MOVSL
    50  	MOVSL
    51  
    52  	CALL	runtime·exitsyscall(SB)
    53  	RET
    54  
    55  TEXT	·Syscall6(SB),NOSPLIT,$0-44
    56  	CALL	runtime·entersyscall(SB)
    57  	MOVL	4(SP), AX	// syscall entry
    58  	// slide args down on top of system call number
    59  	LEAL		8(SP), SI
    60  	LEAL		4(SP), DI
    61  	CLD
    62  	MOVSL
    63  	MOVSL
    64  	MOVSL
    65  	MOVSL
    66  	MOVSL
    67  	MOVSL
    68  	INT	$64
    69  	MOVL	AX, r1+32(SP)
    70  	MOVL	$0, r2+36(SP)
    71  	CMPL	AX, $-1
    72  	JNE	ok4
    73  	
    74  	SUBL	$8, SP
    75  	CALL	runtime·errstr(SB)
    76  	MOVL	SP, SI
    77  	ADDL	$8, SP
    78  	JMP	copyresult4
    79  	
    80  ok4:
    81  	LEAL	runtime·emptystring(SB), SI
    82  	
    83  copyresult4:
    84  	LEAL	err+40(SP), DI
    85  
    86  	CLD
    87  	MOVSL
    88  	MOVSL
    89  
    90  	CALL	runtime·exitsyscall(SB)
    91  	RET
    92  
    93  TEXT ·RawSyscall(SB),NOSPLIT,$0-28
    94  	MOVL	4(SP), AX	// syscall entry
    95  	// slide args down on top of system call number
    96  	LEAL		8(SP), SI
    97  	LEAL		4(SP), DI
    98  	CLD
    99  	MOVSL
   100  	MOVSL
   101  	MOVSL
   102  	INT	$64
   103  	MOVL	AX, r1+20(SP)
   104  	MOVL	AX, r2+24(SP)
   105  	MOVL	AX, err+28(SP)
   106  	RET
   107  
   108  TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
   109  	MOVL	4(SP), AX	// syscall entry
   110  	// slide args down on top of system call number
   111  	LEAL		8(SP), SI
   112  	LEAL		4(SP), DI
   113  	CLD
   114  	MOVSL
   115  	MOVSL
   116  	MOVSL
   117  	MOVSL
   118  	MOVSL
   119  	MOVSL
   120  	INT	$64
   121  	MOVL	AX, r1+32(SP)
   122  	MOVL	AX, r2+36(SP)
   123  	MOVL	AX, err+40(SP)		
   124  	RET
   125  
   126  #define SYS_SEEK 39	/* from zsysnum_plan9_386.go */
   127  
   128  //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
   129  TEXT ·seek(SB),NOSPLIT,$0-36
   130  	LEAL	newoffset+24(SP), AX
   131  	MOVL	AX, placeholder+4(SP)
   132  	
   133  	MOVL	$SYS_SEEK, AX	// syscall entry
   134  	INT	$64
   135  	
   136  	CMPL	AX, $-1
   137  	JNE	ok6
   138  	MOVL	AX, 24(SP)	// newoffset low
   139  	MOVL	AX, 28(SP)	// newoffset high
   140  	
   141  	SUBL	$8, SP
   142  	CALL	syscall·errstr(SB)
   143  	MOVL	SP, SI
   144  	ADDL	$8, SP	
   145  	JMP	copyresult6
   146  	
   147  ok6:
   148  	LEAL	runtime·emptystring(SB), SI
   149  	
   150  copyresult6:
   151  	LEAL	err+32(SP), DI
   152  
   153  	CLD
   154  	MOVSL
   155  	MOVSL
   156  	RET
   157  
   158  //func exit(code int)
   159  // Import runtime·exit for cleanly exiting.
   160  TEXT ·exit(SB),NOSPLIT,$4-4
   161  	MOVL	code+0(FP), AX
   162  	MOVL	AX, 0(SP)
   163  	CALL	runtime·exit(SB)
   164  	RET