strchr.s 722 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. TEXT strchr(SB), $0
  2. MOVW R7, 0(FP)
  3. MOVB c+7(FP), R10
  4. MOVW s+0(FP), R9
  5. SUBCC R0,R10, R0
  6. BE l2
  7. /*
  8. * char is not null
  9. */
  10. l1:
  11. MOVB (R9), R7
  12. ADD $1, R9
  13. SUBCC R0,R7, R0
  14. BE ret
  15. SUBCC R7,R10, R0
  16. BNE l1
  17. JMP rm1
  18. /*
  19. * char is null
  20. * align to word
  21. */
  22. l2:
  23. ANDCC $3,R9, R0
  24. BE l3
  25. MOVB (R9), R7
  26. ADD $1, R9
  27. SUBCC R0,R7, R0
  28. BNE l2
  29. JMP rm1
  30. /*
  31. * develop byte masks
  32. */
  33. l3:
  34. MOVW $0xff, R17
  35. SLL $8,R17, R16
  36. SLL $16,R17, R13
  37. SLL $24,R17, R12
  38. l4:
  39. MOVW (R9), R11
  40. ADD $4, R9
  41. ANDCC R12,R11, R0
  42. BE b0
  43. ANDCC R13,R11, R0
  44. BE b1
  45. ANDCC R16,R11, R0
  46. BE b2
  47. ANDCC R17,R11, R0
  48. BNE l4
  49. rm1:
  50. SUB $1,R9, R7
  51. JMP ret
  52. b2:
  53. SUB $2,R9, R7
  54. JMP ret
  55. b1:
  56. SUB $3,R9, R7
  57. JMP ret
  58. b0:
  59. SUB $4,R9, R7
  60. JMP ret
  61. ret:
  62. RETURN