strlen.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $
  2.  *
  3.  * "strlen" implementation of SuperH
  4.  *
  5.  * Copyright (C) 1999  Kaz Kojima
  6.  *
  7.  */
  8. /* size_t strlen (const char *s)  */
  9. #include <linux/linkage.h>
  10. ENTRY(strlen)
  11. mov r4,r0
  12. and #3,r0
  13. tst r0,r0
  14. bt/s 1f
  15.  mov #0,r2
  16. add #-1,r0
  17. shll2 r0
  18. shll r0
  19. braf r0
  20.  nop
  21. mov.b @r4+,r1
  22. tst r1,r1
  23. bt 8f
  24. add #1,r2
  25. mov.b @r4+,r1
  26. tst r1,r1
  27. bt 8f
  28. add #1,r2
  29. mov.b @r4+,r1
  30. tst r1,r1
  31. bt 8f
  32. add #1,r2
  33. 1:
  34. mov #0,r3
  35. 2:
  36. mov.l @r4+,r1
  37. cmp/str r3,r1
  38. bf/s 2b
  39.  add #4,r2
  40. add #-4,r2
  41. #ifndef __LITTLE_ENDIAN__
  42. swap.b r1,r1
  43. swap.w r1,r1
  44. swap.b r1,r1
  45. #endif
  46. extu.b r1,r0
  47. tst r0,r0
  48. bt/s 8f
  49.  shlr8 r1
  50. add #1,r2
  51. extu.b r1,r0
  52. tst r0,r0
  53. bt/s 8f
  54.  shlr8 r1
  55. add #1,r2
  56. extu.b r1,r0
  57. tst r0,r0
  58. bt 8f
  59. add #1,r2
  60. 8:
  61. rts
  62.  mov r2,r0