| Index: fusl/src/thread/or1k/clone.s
|
| diff --git a/fusl/src/thread/or1k/clone.s b/fusl/src/thread/or1k/clone.s
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..02f380bd5f96db837840e4be2365c24e61252155
|
| --- /dev/null
|
| +++ b/fusl/src/thread/or1k/clone.s
|
| @@ -0,0 +1,30 @@
|
| +/* int clone(fn, stack, flags, arg, ptid, tls, ctid)
|
| + * r3 r4 r5 r6 sp+0 sp+4 sp+8
|
| + * sys_clone(flags, stack, ptid, ctid, tls)
|
| + */
|
| +.global __clone
|
| +.type __clone,@function
|
| +__clone:
|
| + l.addi r4, r4, -8
|
| + l.sw 0(r4), r3
|
| + l.sw 4(r4), r6
|
| + /* (fn, st, fl, ar, pt, tl, ct) => (fl, st, pt, ct, tl) */
|
| + l.ori r3, r5, 0
|
| + l.lwz r5, 0(r1)
|
| + l.lwz r6, 8(r1)
|
| + l.lwz r7, 4(r1)
|
| + l.ori r11, r0, 220 /* __NR_clone */
|
| + l.sys 1
|
| +
|
| + l.sfeqi r11, 0
|
| + l.bf 1f
|
| + l.nop
|
| + l.jr r9
|
| + l.nop
|
| +
|
| +1: l.lwz r11, 0(r1)
|
| + l.jalr r11
|
| + l.lwz r3, 4(r1)
|
| +
|
| + l.ori r11, r0, 93 /* __NR_exit */
|
| + l.sys 1
|
|
|