xref: /aosp_15_r20/external/musl/src/thread/mips/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, -8
8*c9945492SAndroid Build Coastguard Worker	subu $5, $5, 16
9*c9945492SAndroid Build Coastguard Worker	sw $4, 0($5)
10*c9945492SAndroid Build Coastguard Worker	sw $7, 4($5)
11*c9945492SAndroid Build Coastguard Worker	# Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
12*c9945492SAndroid Build Coastguard Worker	move $4, $6
13*c9945492SAndroid Build Coastguard Worker	lw $6, 16($sp)
14*c9945492SAndroid Build Coastguard Worker	lw $7, 20($sp)
15*c9945492SAndroid Build Coastguard Worker	lw $9, 24($sp)
16*c9945492SAndroid Build Coastguard Worker	subu $sp, $sp, 16
17*c9945492SAndroid Build Coastguard Worker	sw $9, 16($sp)
18*c9945492SAndroid Build Coastguard Worker	li $2, 4120
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	addu $sp, $sp, 16
23*c9945492SAndroid Build Coastguard Worker	jr $ra
24*c9945492SAndroid Build Coastguard Worker	subu $2, $0, $2
25*c9945492SAndroid Build Coastguard Worker1:	beq $2, $0, 1f
26*c9945492SAndroid Build Coastguard Worker	nop
27*c9945492SAndroid Build Coastguard Worker	addu $sp, $sp, 16
28*c9945492SAndroid Build Coastguard Worker	jr $ra
29*c9945492SAndroid Build Coastguard Worker	nop
30*c9945492SAndroid Build Coastguard Worker1:	lw $25, 0($sp)
31*c9945492SAndroid Build Coastguard Worker	lw $4, 4($sp)
32*c9945492SAndroid Build Coastguard Worker	jalr $25
33*c9945492SAndroid Build Coastguard Worker	nop
34*c9945492SAndroid Build Coastguard Worker	move $4, $2
35*c9945492SAndroid Build Coastguard Worker	li $2, 4001
36*c9945492SAndroid Build Coastguard Worker	syscall
37