memset.S
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
  2.  *
  3.  * "memset" implementation of SuperH
  4.  *
  5.  * Copyright (C) 1999  Niibe Yutaka
  6.  *
  7.  */
  8. /*
  9.  *            void *memset(void *s, int c, size_t n);
  10.  */
  11. #include <linux/linkage.h>
  12. ENTRY(memset)
  13. tst r6,r6
  14. bt/s 5f ! if n=0, do nothing
  15.  add r6,r4
  16. mov #12,r0
  17. cmp/gt r6,r0
  18. bt/s 4f ! if it's too small, set a byte at once
  19.  mov r4,r0
  20. and #3,r0
  21. cmp/eq #0,r0
  22. bt/s 2f ! It's aligned
  23.  sub r0,r6
  24. 1:
  25. dt r0
  26. bf/s 1b
  27.  mov.b r5,@-r4
  28. 2: ! make VVVV
  29. swap.b r5,r0 !   V0
  30. or r0,r5 !   VV
  31. swap.w r5,r0 ! VV00
  32. or r0,r5 ! VVVV
  33. !
  34. mov r6,r0
  35. shlr2 r0
  36. shlr r0 ! r0 = r6 >> 3
  37. 3:
  38. dt r0
  39. mov.l r5,@-r4 ! set 8-byte at once
  40. bf/s 3b
  41.  mov.l r5,@-r4
  42. !
  43. mov #7,r0
  44. and r0,r6
  45. tst r6,r6
  46. bt 5f
  47. ! fill bytes
  48. 4:
  49. dt r6
  50. bf/s 4b
  51.  mov.b r5,@-r4
  52. 5:
  53. rts
  54.  mov r4,r0