xref: /aosp_15_r20/external/musl/src/thread/sh/clone.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker.text
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! incoming: fn stack flags arg ptid tls      ctid
7*c9945492SAndroid Build Coastguard Worker!           r4 r5    r6    r7  @r15 @(4,r15) @(8,r15)
8*c9945492SAndroid Build Coastguard Worker
9*c9945492SAndroid Build Coastguard Worker	mov   #-16, r0
10*c9945492SAndroid Build Coastguard Worker	and   r0, r5
11*c9945492SAndroid Build Coastguard Worker
12*c9945492SAndroid Build Coastguard Worker	mov   r4, r1         ! r1 = fn
13*c9945492SAndroid Build Coastguard Worker	mov   r7, r2         ! r2 = arg
14*c9945492SAndroid Build Coastguard Worker
15*c9945492SAndroid Build Coastguard Worker	mov   #120,     r3   ! r3 = __NR_clone
16*c9945492SAndroid Build Coastguard Worker	mov   r6,       r4   ! r4 = flags
17*c9945492SAndroid Build Coastguard Worker	!mov  r5,       r5   ! r5 = stack
18*c9945492SAndroid Build Coastguard Worker	mov.l @r15,     r6   ! r6 = ptid
19*c9945492SAndroid Build Coastguard Worker	mov.l @(8,r15), r7   ! r7 = ctid
20*c9945492SAndroid Build Coastguard Worker	mov.l @(4,r15), r0   ! r0 = tls
21*c9945492SAndroid Build Coastguard Worker	trapa #31
22*c9945492SAndroid Build Coastguard Worker
23*c9945492SAndroid Build Coastguard Worker	or r0, r0
24*c9945492SAndroid Build Coastguard Worker	or r0, r0
25*c9945492SAndroid Build Coastguard Worker	or r0, r0
26*c9945492SAndroid Build Coastguard Worker	or r0, r0
27*c9945492SAndroid Build Coastguard Worker	or r0, r0
28*c9945492SAndroid Build Coastguard Worker
29*c9945492SAndroid Build Coastguard Worker	cmp/eq #0, r0
30*c9945492SAndroid Build Coastguard Worker	bt     1f
31*c9945492SAndroid Build Coastguard Worker
32*c9945492SAndroid Build Coastguard Worker	! we are the parent, return
33*c9945492SAndroid Build Coastguard Worker	rts
34*c9945492SAndroid Build Coastguard Worker	 nop
35*c9945492SAndroid Build Coastguard Worker
36*c9945492SAndroid Build Coastguard Worker1:	! we are the child, call fn(arg)
37*c9945492SAndroid Build Coastguard Worker	mov.l  1f, r0
38*c9945492SAndroid Build Coastguard Worker	mov    r1, r5
39*c9945492SAndroid Build Coastguard Worker	bsrf   r0
40*c9945492SAndroid Build Coastguard Worker	 mov    r2, r4
41*c9945492SAndroid Build Coastguard Worker
42*c9945492SAndroid Build Coastguard Worker2:	mov   #1, r3   ! __NR_exit
43*c9945492SAndroid Build Coastguard Worker	mov   r0, r4
44*c9945492SAndroid Build Coastguard Worker	trapa #31
45*c9945492SAndroid Build Coastguard Worker
46*c9945492SAndroid Build Coastguard Worker	or   r0, r0
47*c9945492SAndroid Build Coastguard Worker	or   r0, r0
48*c9945492SAndroid Build Coastguard Worker	or   r0, r0
49*c9945492SAndroid Build Coastguard Worker	or   r0, r0
50*c9945492SAndroid Build Coastguard Worker	or   r0, r0
51*c9945492SAndroid Build Coastguard Worker
52*c9945492SAndroid Build Coastguard Worker.align 2
53*c9945492SAndroid Build Coastguard Worker.hidden __shcall
54*c9945492SAndroid Build Coastguard Worker1:	.long __shcall@PCREL+(.-2b)
55