strcmp.s 1010 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. TEXT strcmp(SB), $-4
  2. MOVW R0, R1
  3. MOVW s2+4(FP), R2
  4. MOVW $0xFF, R3 /* mask */
  5. _align: /* align s1 on 4 */
  6. TST $3, R1
  7. BEQ _aligned
  8. MOVBU.P 1(R1), R4 /* implicit write back */
  9. MOVBU.P 1(R2), R8 /* implicit write back */
  10. SUB.S R8, R4, R0
  11. BNE _return
  12. CMP $0, R4
  13. BEQ _return
  14. B _align
  15. _aligned: /* is s2 now aligned? */
  16. TST $3, R2
  17. BNE _unaligned
  18. _aloop:
  19. MOVW.P 4(R1), R5 /* 4 at a time */
  20. MOVW.P 4(R2), R9
  21. AND R5, R3, R4
  22. AND R9, R3, R8
  23. SUB.S R8, R4, R0
  24. BNE _return
  25. CMP $0, R4
  26. BEQ _return
  27. AND R5>>8, R3, R4
  28. AND R9>>8, R3, R8
  29. SUB.S R8, R4, R0
  30. BNE _return
  31. CMP $0, R4
  32. BEQ _return
  33. AND R5>>16, R3, R4
  34. AND R9>>16, R3, R8
  35. SUB.S R8, R4, R0
  36. BNE _return
  37. CMP $0, R4
  38. BEQ _return
  39. AND R5>>24, R3, R4
  40. AND R9>>24, R3, R8
  41. SUB.S R8, R4, R0
  42. BNE _return
  43. CMP $0, R4
  44. BEQ _return
  45. B _aloop
  46. _return:
  47. RET
  48. _unaligned:
  49. MOVBU.P 1(R1), R4 /* implicit write back */
  50. MOVBU.P 1(R2), R8 /* implicit write back */
  51. SUB.S R8, R4, R0
  52. BNE _return
  53. CMP $0, R4
  54. BEQ _return
  55. B _unaligned