Home | History | Annotate | Download | only in syscall
      1 // Copyright 2013 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 #include "../runtime/syscall_nacl.h"
      8 
      9 //
     10 // System call support for 386, Native Client
     11 //
     12 
     13 #define NACL_SYSCALL(code) \
     14 	MOVL $(0x10000 + ((code)<<5)), AX; CALL AX
     15 
     16 #define NACL_SYSJMP(code) \
     17 	MOVL $(0x10000 + ((code)<<5)), AX; JMP AX
     18 
     19 TEXT Syscall(SB),NOSPLIT,$12-28
     20 	NO_LOCAL_POINTERS
     21 	CALL	runtimeentersyscall(SB)
     22 	MOVL	trap+0(FP), AX
     23 	MOVL	a1+4(FP), BX
     24 	MOVL	BX, 0(SP)
     25 	MOVL	a2+8(FP), BX
     26 	MOVL	BX, 4(SP)
     27 	MOVL	a3+12(FP), BX
     28 	MOVL	BX, 8(SP)
     29 	SHLL	$5, AX
     30 	ADDL	$0x10000, AX
     31 	CALL	AX
     32 	CMPL	AX, $0
     33 	JGE	ok
     34 	MOVL	$-1, r1+16(FP)
     35 	MOVL	$-1, r2+20(FP)
     36 	NEGL	AX
     37 	MOVL	AX, err+24(FP)
     38 	CALL	runtimeexitsyscall(SB)
     39 	RET
     40 ok:
     41 	MOVL	AX, r1+16(FP)
     42 	MOVL	DX, r2+20(FP)
     43 	MOVL	$0, err+24(FP)
     44 	CALL	runtimeexitsyscall(SB)
     45 	RET
     46