// Copyright 2013 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
#include "textflag.h" | |
#include "funcdata.h" | |
#include "../runtime/syscall_nacl.h" | |
// | |
// System call support for 386, Native Client | |
// | |
#define NACL_SYSCALL(code) \ | |
MOVL $(0x10000 + ((code)<<5)), AX; CALL AX | |
#define NACL_SYSJMP(code) \ | |
MOVL $(0x10000 + ((code)<<5)), AX; JMP AX | |
TEXT ·Syscall(SB),NOSPLIT,$12-28 | |
NO_LOCAL_POINTERS | |
CALL runtime·entersyscall(SB) | |
MOVL trap+0(FP), AX | |
MOVL a1+4(FP), BX | |
MOVL BX, 0(SP) | |
MOVL a2+8(FP), BX | |
MOVL BX, 4(SP) | |
MOVL a3+12(FP), BX | |
MOVL BX, 8(SP) | |
SHLL $5, AX | |
ADDL $0x10000, AX | |
CALL AX | |
CMPL AX, $0 | |
JGE ok | |
MOVL $-1, r1+16(FP) | |
MOVL $-1, r2+20(FP) | |
NEGL AX | |
MOVL AX, err+24(FP) | |
CALL runtime·exitsyscall(SB) | |
RET | |
ok: | |
MOVL AX, r1+16(FP) | |
MOVL DX, r2+20(FP) | |
MOVL $0, err+24(FP) | |
CALL runtime·exitsyscall(SB) | |
RET |