asm_plan9_386.s raw

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