strchr.s 637 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. TEXT strchr(SB), $0
  2. MOVW R1, 0(FP)
  3. MOVB c+7(FP), R4
  4. MOVW s+0(FP), R3
  5. BEQ R4, l2
  6. /*
  7. * char is not null
  8. */
  9. l1:
  10. MOVB (R3), R1
  11. ADDU $1, R3
  12. BEQ R1, ret
  13. BNE R1,R4, l1
  14. JMP rm1
  15. /*
  16. * char is null
  17. * align to word
  18. */
  19. l2:
  20. AND $3,R3, R1
  21. BEQ R1, l3
  22. MOVB (R3), R1
  23. ADDU $1, R3
  24. BNE R1, l2
  25. JMP rm1
  26. l3:
  27. MOVW $0xff000000, R6
  28. MOVW $0x00ff0000, R7
  29. l4:
  30. MOVW (R3), R5
  31. ADDU $4, R3
  32. AND R6,R5, R1
  33. AND R7,R5, R2
  34. BEQ R1, b0
  35. AND $0xff00,R5, R1
  36. BEQ R2, b1
  37. AND $0xff,R5, R2
  38. BEQ R1, b2
  39. BNE R2, l4
  40. rm1:
  41. ADDU $-1,R3, R1
  42. JMP ret
  43. b2:
  44. ADDU $-2,R3, R1
  45. JMP ret
  46. b1:
  47. ADDU $-3,R3, R1
  48. JMP ret
  49. b0:
  50. ADDU $-4,R3, R1
  51. JMP ret
  52. ret:
  53. RET