strcpy.s 437 B

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