memccpy.s 333 B

123456789101112131415161718192021222324252627282930
  1. TEXT memccpy(SB),$0
  2. MOVL n+12(FP),R0
  3. BEQ ret
  4. MOVL s1+0(FP),A2
  5. MOVL s2+4(FP),A1
  6. MOVL c+8(FP),R1
  7. BEQ l2
  8. /*
  9. * general case
  10. */
  11. l1: MOVB (A1)+,R2
  12. MOVB R2,(A2)+
  13. CMPB R2,R1
  14. BEQ eq
  15. SUBL $1,R0
  16. BNE l1
  17. RTS
  18. /*
  19. * special case for null character
  20. */
  21. l2: MOVB (A1)+,(A2)+
  22. BEQ eq
  23. SUBL $1,R0
  24. BNE l2
  25. RTS
  26. eq: MOVL A2,R0
  27. ret: RTS