...

Text file src/syscall/asm_unix_386.s

     1	// +build netbsd freebsd openbsd
     2	
     3	// Copyright 2009 The Go Authors. All rights reserved.
     4	// Use of this source code is governed by a BSD-style
     5	// license that can be found in the LICENSE file.
     6	
     7	#include "textflag.h"
     8	#include "funcdata.h"
     9	
    10	//
    11	// System call support for some 386 unixes
    12	//
    13	
    14	// func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
    15	// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
    16	// Trap # in AX, args on stack above caller pc.
    17	
    18	TEXT	·Syscall(SB),NOSPLIT,$0-28
    19		CALL	runtime·entersyscall(SB)
    20		MOVL	trap+0(FP), AX	// syscall entry
    21		// slide args down on top of system call number
    22		LEAL		a1+4(FP), SI
    23		LEAL		trap+0(FP), DI
    24		CLD
    25		MOVSL
    26		MOVSL
    27		MOVSL
    28		INT	$0x80
    29		JAE	ok
    30		MOVL	$-1, r1+16(FP)	// r1
    31		MOVL	$-1, r2+20(FP)	// r2
    32		MOVL	AX, err+24(FP)	// errno
    33		CALL	runtime·exitsyscall(SB)
    34		RET
    35	ok:
    36		MOVL	AX, r1+16(FP)	// r1
    37		MOVL	DX, r2+20(FP)	// r2
    38		MOVL	$0, err+24(FP)	// errno
    39		CALL	runtime·exitsyscall(SB)
    40		RET
    41	
    42	TEXT	·Syscall6(SB),NOSPLIT,$0-40
    43		CALL	runtime·entersyscall(SB)
    44		MOVL	trap+0(FP), AX	// syscall entry
    45		// slide args down on top of system call number
    46		LEAL		a1+4(FP), SI
    47		LEAL		trap+0(FP), DI
    48		CLD
    49		MOVSL
    50		MOVSL
    51		MOVSL
    52		MOVSL
    53		MOVSL
    54		MOVSL
    55		INT	$0x80
    56		JAE	ok6
    57		MOVL	$-1, r1+28(FP)	// r1
    58		MOVL	$-1, r2+32(FP)	// r2
    59		MOVL	AX, err+36(FP)	// errno
    60		CALL	runtime·exitsyscall(SB)
    61		RET
    62	ok6:
    63		MOVL	AX, r1+28(FP)	// r1
    64		MOVL	DX, r2+32(FP)	// r2
    65		MOVL	$0, err+36(FP)	// errno
    66		CALL	runtime·exitsyscall(SB)
    67		RET
    68	
    69	TEXT	·Syscall9(SB),NOSPLIT,$0-52
    70		CALL	runtime·entersyscall(SB)
    71		MOVL	num+0(FP), AX	// syscall entry
    72		// slide args down on top of system call number
    73		LEAL		a1+4(FP), SI
    74		LEAL		num+0(FP), DI
    75		CLD
    76		MOVSL
    77		MOVSL
    78		MOVSL
    79		MOVSL
    80		MOVSL
    81		MOVSL
    82		MOVSL
    83		MOVSL
    84		MOVSL
    85		INT	$0x80
    86		JAE	ok9
    87		MOVL	$-1, r1+40(FP)	// r1
    88		MOVL	$-1, r2+44(FP)	// r2
    89		MOVL	AX, err+48(FP)	// errno
    90		CALL	runtime·exitsyscall(SB)
    91		RET
    92	ok9:
    93		MOVL	AX, r1+40(FP)	// r1
    94		MOVL	DX, r2+44(FP)	// r2
    95		MOVL	$0, err+48(FP)	// errno
    96		CALL	runtime·exitsyscall(SB)
    97		RET
    98	
    99	TEXT ·RawSyscall(SB),NOSPLIT,$0-28
   100		MOVL	trap+0(FP), AX	// syscall entry
   101		// slide args down on top of system call number
   102		LEAL		a1+4(FP), SI
   103		LEAL		trap+0(FP), DI
   104		CLD
   105		MOVSL
   106		MOVSL
   107		MOVSL
   108		INT	$0x80
   109		JAE	ok1
   110		MOVL	$-1, r1+16(FP)	// r1
   111		MOVL	$-1, r2+20(FP)	// r2
   112		MOVL	AX, err+24(FP)	// errno
   113		RET
   114	ok1:
   115		MOVL	AX, r1+16(FP)	// r1
   116		MOVL	DX, r2+20(FP)	// r2
   117		MOVL	$0, err+24(FP)	// errno
   118		RET
   119	
   120	TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
   121		MOVL	trap+0(FP), AX	// syscall entry
   122		// slide args down on top of system call number
   123		LEAL		a1+4(FP), SI
   124		LEAL		trap+0(FP), DI
   125		CLD
   126		MOVSL
   127		MOVSL
   128		MOVSL
   129		MOVSL
   130		MOVSL
   131		MOVSL
   132		INT	$0x80
   133		JAE	ok2
   134		MOVL	$-1, r1+28(FP)	// r1
   135		MOVL	$-1, r2+32(FP)	// r2
   136		MOVL	AX, err+36(FP)	// errno
   137		RET
   138	ok2:
   139		MOVL	AX, r1+28(FP)	// r1
   140		MOVL	DX, r2+32(FP)	// r2
   141		MOVL	$0, err+36(FP)	// errno
   142		RET

View as plain text