summaryrefslogtreecommitdiff
path: root/src/syscall/asm_nacl_arm.s
diff options
context:
space:
mode:
authorTianon Gravi <admwiggin@gmail.com>2015-01-15 11:54:00 -0700
committerTianon Gravi <admwiggin@gmail.com>2015-01-15 11:54:00 -0700
commitf154da9e12608589e8d5f0508f908a0c3e88a1bb (patch)
treef8255d51e10c6f1e0ed69702200b966c9556a431 /src/syscall/asm_nacl_arm.s
parent8d8329ed5dfb9622c82a9fbec6fd99a580f9c9f6 (diff)
downloadgolang-upstream/1.4.tar.gz
Imported Upstream version 1.4upstream/1.4
Diffstat (limited to 'src/syscall/asm_nacl_arm.s')
-rw-r--r--src/syscall/asm_nacl_arm.s44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/syscall/asm_nacl_arm.s b/src/syscall/asm_nacl_arm.s
new file mode 100644
index 000000000..78e10bf7a
--- /dev/null
+++ b/src/syscall/asm_nacl_arm.s
@@ -0,0 +1,44 @@
+// Copyright 2014 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 ARM, Native Client
+//
+
+#define NACL_SYSCALL(code) \
+ MOVW $(0x10000 + ((code)<<5)), R8; BL (R8)
+
+#define NACL_SYSJMP(code) \
+ MOVW $(0x10000 + ((code)<<5)), R8; B (R8)
+
+TEXT syscall·Syscall(SB),NOSPLIT,$0-28
+ BL runtime·entersyscall(SB)
+ MOVW trap+0(FP), R8
+ MOVW a1+4(FP), R0
+ MOVW a2+8(FP), R1
+ MOVW a3+12(FP), R2
+ // more args would use R3, and then stack.
+ MOVW $0x10000, R7
+ ADD R8<<5, R7
+ BL (R7)
+ CMP $0, R0
+ BGE ok
+ MOVW $-1, R1
+ MOVW R1, r1+16(FP)
+ MOVW R1, r2+20(FP)
+ RSB $0, R0
+ MOVW R0, err+24(FP)
+ BL runtime·exitsyscall(SB)
+ RET
+ok:
+ MOVW R0, r1+16(FP)
+ MOVW R1, r2+20(FP)
+ MOVW $0, R2
+ MOVW R2, err+24(FP)
+ BL runtime·exitsyscall(SB)
+ RET