microblaze port
[musl] / src / thread / microblaze / clone.s
diff --git a/src/thread/microblaze/clone.s b/src/thread/microblaze/clone.s
new file mode 100644 (file)
index 0000000..cff80ef
--- /dev/null
@@ -0,0 +1,33 @@
+.global __clone
+.weak clone
+.type   __clone,@function
+.type   clone,@function
+
+# r5, r6, r7, r8, r9, r10, stack
+# fn, st, fl, ar, pt, tl, ct
+# fl, st, pt, tl, ctx
+
+__clone:
+clone:
+       andi    r6, r6, -16
+       addi    r6, r6, -16
+       swi     r5, r6, 0
+       swi     r8, r6, 4
+
+       ori     r5, r7, 0
+       ori     r7, r9, 0
+       ori     r8, r10, 0
+       lwi     r9, r1, 28
+       ori     r12, r0, 120
+
+       brki    r14, 8
+       beqi    r3, 1f
+       rtsd    r15, 8
+       nop
+       
+1:     lwi     r3, r1, 0
+       lwi     r5, r1, 4
+       brald   r15, r3
+       nop
+       ori     r12, r0, 1
+       brki    r14, 8