...

Text file src/pkg/syscall/asm_plan9_386.s

     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

View as plain text