xref: /aosp_15_r20/external/musl/src/thread/aarch64/clone.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker// __clone(func, stack, flags, arg, ptid, tls, ctid)
2*c9945492SAndroid Build Coastguard Worker//         x0,   x1,    w2,    x3,  x4,   x5,  x6
3*c9945492SAndroid Build Coastguard Worker
4*c9945492SAndroid Build Coastguard Worker// syscall(SYS_clone, flags, stack, ptid, tls, ctid)
5*c9945492SAndroid Build Coastguard Worker//         x8,        x0,    x1,    x2,   x3,  x4
6*c9945492SAndroid Build Coastguard Worker
7*c9945492SAndroid Build Coastguard Worker.global __clone
8*c9945492SAndroid Build Coastguard Worker.hidden __clone
9*c9945492SAndroid Build Coastguard Worker.type   __clone,%function
10*c9945492SAndroid Build Coastguard Worker__clone:
11*c9945492SAndroid Build Coastguard Worker	// align stack and save func,arg
12*c9945492SAndroid Build Coastguard Worker	and x1,x1,#-16
13*c9945492SAndroid Build Coastguard Worker	stp x0,x3,[x1,#-16]!
14*c9945492SAndroid Build Coastguard Worker
15*c9945492SAndroid Build Coastguard Worker	// syscall
16*c9945492SAndroid Build Coastguard Worker	uxtw x0,w2
17*c9945492SAndroid Build Coastguard Worker	mov x2,x4
18*c9945492SAndroid Build Coastguard Worker	mov x3,x5
19*c9945492SAndroid Build Coastguard Worker	mov x4,x6
20*c9945492SAndroid Build Coastguard Worker	mov x8,#220 // SYS_clone
21*c9945492SAndroid Build Coastguard Worker	svc #0
22*c9945492SAndroid Build Coastguard Worker
23*c9945492SAndroid Build Coastguard Worker	cbz x0,1f
24*c9945492SAndroid Build Coastguard Worker	// parent
25*c9945492SAndroid Build Coastguard Worker	ret
26*c9945492SAndroid Build Coastguard Worker	// child
27*c9945492SAndroid Build Coastguard Worker1:	ldp x1,x0,[sp],#16
28*c9945492SAndroid Build Coastguard Worker	blr x1
29*c9945492SAndroid Build Coastguard Worker	mov x8,#93 // SYS_exit
30*c9945492SAndroid Build Coastguard Worker	svc #0
31