master
 1// __clone(func, stack, flags, arg, ptid, tls, ctid)
 2//         r0,   r1,    r2,    r3,  r4,   r5,  stack
 3
 4// tid = syscall(SYS_clone, flags, stack, ptid, ctid, tls)
 5//               r6,        r0,    r1,    r2,   r3,   r4
 6// if (tid != 0) return
 7// func(arg)
 8// syscall(SYS_exit)
 9
10.text
11.global __clone
12.type   __clone,%function
13__clone:
14	allocframe(#8)
15	// Save pointers for later
16	{ r11 = r0
17	  r10 = r3 }
18
19	// Set up syscall args - The stack must be 8 byte aligned.
20	{ r0 = r2
21	  r1 = and(r1, ##0xfffffff8)
22	  r2 = r4 }
23	{
24	  r3 = memw(r30+#8)
25	  r4 = r5 }
26	r6 = #220			// SYS_clone
27	trap0(#1)
28
29	p0 = cmp.eq(r0, #0)
30	if (!p0) dealloc_return
31
32	{ r0 = r10
33	  callr r11 }
34
35	r6 = #93			// SYS_exit
36	trap0(#1)
37.size __clone, .-__clone