memcmp_32.S 625 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * memcmp for PowerPC32
  4. *
  5. * Copyright (C) 1996 Paul Mackerras.
  6. *
  7. */
  8. #include <asm/ppc_asm.h>
  9. #include <asm/export.h>
  10. .text
  11. _GLOBAL(memcmp)
  12. srawi. r7, r5, 2 /* Divide len by 4 */
  13. mr r6, r3
  14. beq- 3f
  15. mtctr r7
  16. li r7, 0
  17. 1: lwzx r3, r6, r7
  18. lwzx r0, r4, r7
  19. addi r7, r7, 4
  20. cmplw cr0, r3, r0
  21. bdnzt eq, 1b
  22. bne 5f
  23. 3: andi. r3, r5, 3
  24. beqlr
  25. cmplwi cr1, r3, 2
  26. blt- cr1, 4f
  27. lhzx r3, r6, r7
  28. lhzx r0, r4, r7
  29. addi r7, r7, 2
  30. subf. r3, r0, r3
  31. beqlr cr1
  32. bnelr
  33. 4: lbzx r3, r6, r7
  34. lbzx r0, r4, r7
  35. subf. r3, r0, r3
  36. blr
  37. 5: li r3, 1
  38. bgtlr
  39. li r3, -1
  40. blr
  41. EXPORT_SYMBOL(memcmp)