memcmp.s 452 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. TEXT memcmp(SB),$0
  2. MOVL n+8(FP), BX
  3. CMPL BX, $0
  4. JEQ none
  5. MOVL p1+0(FP), DI
  6. MOVL p2+4(FP), SI
  7. CLD
  8. /*
  9. * first by longs
  10. */
  11. MOVL BX, CX
  12. SHRL $2, CX
  13. REP; CMPSL
  14. JNE found
  15. /*
  16. * then by bytes
  17. */
  18. ANDL $3, BX
  19. MOVL BX, CX
  20. REP; CMPSB
  21. JNE found1
  22. none:
  23. MOVL $0, AX
  24. RET
  25. /*
  26. * if long found,
  27. * back up and look by bytes
  28. */
  29. found:
  30. MOVL $4, CX
  31. SUBL CX, DI
  32. SUBL CX, SI
  33. REP; CMPSB
  34. found1:
  35. JLS lt
  36. MOVL $-1, AX
  37. RET
  38. lt:
  39. MOVL $1, AX
  40. RET