github.com/afumu/libc@v0.0.6/musl/src/thread/sh/clone.s (about)

     1  .text
     2  .global __clone
     3  .hidden __clone
     4  .type   __clone, @function
     5  __clone:
     6  ! incoming: fn stack flags arg ptid tls      ctid
     7  !           r4 r5    r6    r7  @r15 @(4,r15) @(8,r15)
     8  
     9  	mov   #-16, r0
    10  	and   r0, r5
    11  
    12  	mov   r4, r1         ! r1 = fn
    13  	mov   r7, r2         ! r2 = arg
    14  
    15  	mov   #120,     r3   ! r3 = __NR_clone
    16  	mov   r6,       r4   ! r4 = flags
    17  	!mov  r5,       r5   ! r5 = stack
    18  	mov.l @r15,     r6   ! r6 = ptid
    19  	mov.l @(8,r15), r7   ! r7 = ctid
    20  	mov.l @(4,r15), r0   ! r0 = tls
    21  	trapa #31
    22  
    23  	or r0, r0
    24  	or r0, r0
    25  	or r0, r0
    26  	or r0, r0
    27  	or r0, r0
    28  
    29  	cmp/eq #0, r0
    30  	bt     1f
    31  
    32  	! we are the parent, return
    33  	rts
    34  	 nop
    35  
    36  1:	! we are the child, call fn(arg)
    37  	mov.l  1f, r0
    38  	mov    r1, r5
    39  	bsrf   r0
    40  	 mov    r2, r4
    41  
    42  2:	mov   #1, r3   ! __NR_exit
    43  	mov   r0, r4
    44  	trapa #31
    45  
    46  	or   r0, r0
    47  	or   r0, r0
    48  	or   r0, r0
    49  	or   r0, r0
    50  	or   r0, r0
    51  
    52  .align 2
    53  .hidden __shcall
    54  1:	.long __shcall@PCREL+(.-2b)