memset.s 634 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. TEXT memset(SB), $0
  2. MOVL n+8(FP), R0
  3. BLE return
  4. MOVL s1+0(FP), A1
  5. CLRL R1
  6. MOVB c+7(FP), R1
  7. BEQ l1
  8. /*
  9. * create 4 replicated copies
  10. * of the byte in R1
  11. */
  12. MOVL R1, R2
  13. ASLL $8, R2
  14. ORL R2, R1
  15. MOVL R1, R2
  16. SWAP R2
  17. ORL R2, R1
  18. /*
  19. * byte-at-a-time until alligned
  20. */
  21. l1:
  22. MOVL A1, R1
  23. ANDL $3, R1
  24. BEQ l2
  25. SUBL $1, R0
  26. BLT return
  27. MOVB R1, (A1)+
  28. BRA l1
  29. /*
  30. * quad-long-at-a-time set
  31. */
  32. l2:
  33. SUBL $16, R0
  34. BLT l3
  35. MOVL R1, (A1)+
  36. MOVL R1, (A1)+
  37. MOVL R1, (A1)+
  38. MOVL R1, (A1)+
  39. BRA l2
  40. /*
  41. * cleanup byte-at-a-time
  42. */
  43. l3:
  44. ADDL $15, R0
  45. BLT return
  46. l4:
  47. MOVB R1, (A1)+
  48. SUBL $1, R0
  49. BGE l4
  50. return:
  51. MOVL s1+0(FP),R0
  52. RTS