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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/lib/io-readsl-armv4.S
  3.  *
  4.  *  Copyright (C) 1995-2000 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #include <linux/linkage.h>
  11. #include <asm/assembler.h>
  12. #include <asm/hardware.h>
  13. /*
  14.  * Note that some reads can be aligned on half-word boundaries.
  15.  */
  16. ENTRY(__raw_readsl)
  17. teq r2, #0 @ do we have to check for the zero len?
  18. moveq pc, lr
  19. ands ip, r1, #3
  20. bne 2f
  21. 1: ldr r3, [r0]
  22. str r3, [r1], #4
  23. subs r2, r2, #1
  24. bne 1b
  25. mov pc, lr
  26. 2: cmp ip, #2
  27. ldr ip, [r0]
  28. blt 4f
  29. bgt 6f
  30. strh ip, [r1], #2
  31. mov ip, ip, lsr #16
  32. 3: subs r2, r2, #1
  33. ldrne r3, [r0]
  34. orrne ip, ip, r3, lsl #16
  35. strne ip, [r1], #4
  36. movne ip, r3, lsr #16
  37. bne 3b
  38. strh ip, [r1], #2
  39. mov pc, lr
  40. 4: strb ip, [r1], #1
  41. mov ip, ip, lsr #8
  42. strh ip, [r1], #2
  43. mov ip, ip, lsr #16
  44. 5: subs r2, r2, #1
  45. ldrne r3, [r0]
  46. orrne ip, ip, r3, lsl #8
  47. strne ip, [r1], #4
  48. movne ip, r3, lsr #24
  49. bne 5b
  50. strb ip, [r1], #1
  51. mov pc, lr
  52. 6: strb ip, [r1], #1
  53. mov ip, ip, lsr #8
  54. 7: subs r2, r2, #1
  55. ldrne r3, [r0]
  56. orrne ip, ip, r3, lsl #24
  57. strne ip, [r1], #4
  58. movne ip, r3, lsr #8
  59. bne 7b
  60. strh ip, [r1], #2
  61. mov ip, ip, lsr #16
  62. strb ip, [r1]
  63. mov pc, lr