clone.s 542 B

1234567891011121314151617181920212223242526272829303132
  1. .set noreorder
  2. .global __clone
  3. .type __clone,@function
  4. __clone:
  5. # Save function pointer and argument pointer on new thread stack
  6. and $5, $5, -8
  7. subu $5, $5, 16
  8. sw $4, 0($5)
  9. sw $7, 4($5)
  10. # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
  11. move $4, $6
  12. lw $6, 16($sp)
  13. lw $7, 20($sp)
  14. lw $9, 24($sp)
  15. subu $sp, $sp, 16
  16. sw $9, 16($sp)
  17. li $2, 4120
  18. syscall
  19. beq $7, $0, 1f
  20. nop
  21. addu $sp, $sp, 16
  22. jr $ra
  23. subu $2, $0, $2
  24. 1: beq $2, $0, 1f
  25. nop
  26. addu $sp, $sp, 16
  27. jr $ra
  28. nop
  29. 1: lw $25, 0($sp)
  30. lw $4, 4($sp)
  31. jr $25
  32. nop