about summary refs log tree commit diff
path: root/src/thread/arm/syscall_cp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/arm/syscall_cp.s')
-rw-r--r--src/thread/arm/syscall_cp.s23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/thread/arm/syscall_cp.s b/src/thread/arm/syscall_cp.s
new file mode 100644
index 00000000..59924fc5
--- /dev/null
+++ b/src/thread/arm/syscall_cp.s
@@ -0,0 +1,23 @@
+.global __syscall_cp_asm
+.type __syscall_cp_asm,%function
+__syscall_cp_asm:
+	mov ip,sp
+	stmfd sp!,{r4,r5,r6,r7,lr}
+	stmfd sp!,{r0}
+	bl 1f
+1:	mov r4,#(1f-.)
+	add r4,r4,lr
+	str r4,[r0,#4]
+	str sp,[r0]
+	mov r7,r1
+	mov r0,r2
+	mov r1,r3
+	ldmfd ip,{r2,r3,r4,r5,r6}
+1:	svc 0
+	ldmfd sp!,{r1}
+	mov r2,#0
+	str r2,[r1]
+	ldmfd sp!,{r4,r5,r6,r7,lr}
+	tst lr,#1
+	moveq pc,lr
+	bx lr