xref: /aosp_15_r20/external/musl/src/thread/mipsn32/clone.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker.set	noreorder
2*c9945492SAndroid Build Coastguard Worker.global	__clone
3*c9945492SAndroid Build Coastguard Worker.hidden __clone
4*c9945492SAndroid Build Coastguard Worker.type	__clone,@function
5*c9945492SAndroid Build Coastguard Worker__clone:
6*c9945492SAndroid Build Coastguard Worker	# Save function pointer and argument pointer on new thread stack
7*c9945492SAndroid Build Coastguard Worker	and	$5, $5, -16	# aligning stack to double word
8*c9945492SAndroid Build Coastguard Worker	subu	$5, $5, 16
9*c9945492SAndroid Build Coastguard Worker	sw	$4, 0($5)	# save function pointer
10*c9945492SAndroid Build Coastguard Worker	sw	$7, 4($5)	# save argument pointer
11*c9945492SAndroid Build Coastguard Worker
12*c9945492SAndroid Build Coastguard Worker	# Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
13*c9945492SAndroid Build Coastguard Worker	# sys_clone(u64 flags, u64 ustack_base, u64 parent_tidptr, u64 child_tidptr, u64 tls)
14*c9945492SAndroid Build Coastguard Worker	move	$4, $6
15*c9945492SAndroid Build Coastguard Worker	move	$6, $8
16*c9945492SAndroid Build Coastguard Worker	move	$7, $9
17*c9945492SAndroid Build Coastguard Worker	move	$8, $10
18*c9945492SAndroid Build Coastguard Worker	li	$2, 6055
19*c9945492SAndroid Build Coastguard Worker	syscall
20*c9945492SAndroid Build Coastguard Worker	beq	$7, $0, 1f
21*c9945492SAndroid Build Coastguard Worker	nop
22*c9945492SAndroid Build Coastguard Worker	jr	$ra
23*c9945492SAndroid Build Coastguard Worker	subu	$2, $0, $2
24*c9945492SAndroid Build Coastguard Worker1:	beq	$2, $0, 1f
25*c9945492SAndroid Build Coastguard Worker	nop
26*c9945492SAndroid Build Coastguard Worker	jr	$ra
27*c9945492SAndroid Build Coastguard Worker	nop
28*c9945492SAndroid Build Coastguard Worker1:	lw	$25, 0($sp)	# function pointer
29*c9945492SAndroid Build Coastguard Worker	lw	$4, 4($sp)	# argument pointer
30*c9945492SAndroid Build Coastguard Worker	jalr	$25		# call the user's function
31*c9945492SAndroid Build Coastguard Worker	nop
32*c9945492SAndroid Build Coastguard Worker	move 	$4, $2
33*c9945492SAndroid Build Coastguard Worker	li	$2, 6058
34*c9945492SAndroid Build Coastguard Worker	syscall
35