strcat.s 449 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. TEXT strcat(SB),$0
  2. MOVL $0, AX
  3. MOVL $-1, CX
  4. CLD
  5. /*
  6. * find length of second string
  7. */
  8. MOVL p2+4(FP), DI
  9. REPN; SCASB
  10. MOVL DI, BX
  11. SUBL p2+4(FP), BX
  12. /*
  13. * find end of first string
  14. */
  15. MOVL p1+0(FP), DI
  16. REPN; SCASB
  17. /*
  18. * copy the memory
  19. */
  20. SUBL $1, DI
  21. MOVL p2+4(FP), SI
  22. /*
  23. * copy whole longs
  24. */
  25. MOVL BX, CX
  26. SHRL $2, CX
  27. REP; MOVSL
  28. /*
  29. * copy the rest, by bytes
  30. */
  31. ANDL $3, BX
  32. MOVL BX, CX
  33. REP; MOVSB
  34. MOVL p1+0(FP), AX
  35. RET