blob: b8c097b53900b4172d6a5c7b914636b25e29ad2d [file] [log] [blame]
Dave Cheney7c8280c2014-02-25 09:47:42 -05001// 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
Rob Pike8bca1482014-08-12 17:04:45 -07005#include "textflag.h"
Russ Cox860a6452014-09-12 00:55:24 -04006#include "funcdata.h"
Dave Cheney7c8280c2014-02-25 09:47:42 -05007#include "../runtime/syscall_nacl.h"
8
9//
10// System call support for amd64, 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
Shenghou Maa6cb0532015-01-08 21:49:28 -050019TEXT ·Syscall(SB),NOSPLIT,$0-28
Dave Cheney7c8280c2014-02-25 09:47:42 -050020 CALL runtime·entersyscall(SB)
21 MOVL trap+0(FP), AX
22 MOVL a1+4(FP), DI
23 MOVL a2+8(FP), SI
24 MOVL a3+12(FP), DX
25 // more args would use CX, R8, R9
26 SHLL $5, AX
27 ADDL $0x10000, AX
28 CALL AX
29 CMPL AX, $0
30 JGE ok
31 MOVL $-1, r1+16(FP)
32 MOVL $-1, r2+20(FP)
33 NEGL AX
Russ Cox7ad60b72014-05-15 16:47:53 -040034 MOVL AX, err+24(FP)
Dave Cheney7c8280c2014-02-25 09:47:42 -050035 CALL runtime·exitsyscall(SB)
36 RET
37ok:
38 MOVL AX, r1+16(FP)
39 MOVL DX, r2+20(FP)
Russ Cox7ad60b72014-05-15 16:47:53 -040040 MOVL $0, err+24(FP)
Dave Cheney7c8280c2014-02-25 09:47:42 -050041 CALL runtime·exitsyscall(SB)
42 RET