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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/lib/io-readsb.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. .insb_align: rsb ip, ip, #4
  14. cmp ip, r2
  15. movgt ip, r2
  16. cmp ip, #2
  17. ldrb r3, [r0]
  18. strb r3, [r1], #1
  19. ldrgeb r3, [r0]
  20. strgeb r3, [r1], #1
  21. ldrgtb r3, [r0]
  22. strgtb r3, [r1], #1
  23. subs r2, r2, ip
  24. bne .insb_aligned
  25. ENTRY(__raw_readsb)
  26. teq r2, #0 @ do we have to check for the zero len?
  27. moveq pc, lr
  28. ands ip, r1, #3
  29. bne .insb_align
  30. .insb_aligned: stmfd sp!, {r4 - r6, lr}
  31. subs r2, r2, #16
  32. bmi .insb_no_16
  33. .insb_16_lp: ldrb r3, [r0]
  34. ldrb r4, [r0]
  35. orr r3, r3, r4, lsl #8
  36. ldrb r4, [r0]
  37. orr r3, r3, r4, lsl #16
  38. ldrb r4, [r0]
  39. orr r3, r3, r4, lsl #24
  40. ldrb r4, [r0]
  41. ldrb r5, [r0]
  42. orr r4, r4, r5, lsl #8
  43. ldrb r5, [r0]
  44. orr r4, r4, r5, lsl #16
  45. ldrb r5, [r0]
  46. orr r4, r4, r5, lsl #24
  47. ldrb r5, [r0]
  48. ldrb r6, [r0]
  49. orr r5, r5, r6, lsl #8
  50. ldrb r6, [r0]
  51. orr r5, r5, r6, lsl #16
  52. ldrb r6, [r0]
  53. orr r5, r5, r6, lsl #24
  54. ldrb r6, [r0]
  55. ldrb ip, [r0]
  56. orr r6, r6, ip, lsl #8
  57. ldrb ip, [r0]
  58. orr r6, r6, ip, lsl #16
  59. ldrb ip, [r0]
  60. orr r6, r6, ip, lsl #24
  61. stmia r1!, {r3 - r6}
  62. subs r2, r2, #16
  63. bpl .insb_16_lp
  64. tst r2, #15
  65. LOADREGS(eqfd, sp!, {r4 - r6, pc})
  66. .insb_no_16: tst r2, #8
  67. beq .insb_no_8
  68. ldrb r3, [r0]
  69. ldrb r4, [r0]
  70. orr r3, r3, r4, lsl #8
  71. ldrb r4, [r0]
  72. orr r3, r3, r4, lsl #16
  73. ldrb r4, [r0]
  74. orr r3, r3, r4, lsl #24
  75. ldrb r4, [r0]
  76. ldrb r5, [r0]
  77. orr r4, r4, r5, lsl #8
  78. ldrb r5, [r0]
  79. orr r4, r4, r5, lsl #16
  80. ldrb r5, [r0]
  81. orr r4, r4, r5, lsl #24
  82. stmia r1!, {r3, r4}
  83. .insb_no_8: tst r2, #4
  84. beq .insb_no_4
  85. ldrb r3, [r0]
  86. ldrb r4, [r0]
  87. orr r3, r3, r4, lsl #8
  88. ldrb r4, [r0]
  89. orr r3, r3, r4, lsl #16
  90. ldrb r4, [r0]
  91. orr r3, r3, r4, lsl #24
  92. str r3, [r1], #4
  93. .insb_no_4: ands r2, r2, #3
  94. LOADREGS(eqfd, sp!, {r4 - r6, pc})
  95. cmp r2, #2
  96. ldrb r3, [r0]
  97. strb r3, [r1], #1
  98. ldrgeb r3, [r0]
  99. strgeb r3, [r1], #1
  100. ldrgtb r3, [r0]
  101. strgtb r3, [r1]
  102. LOADREGS(fd, sp!, {r4 - r6, pc})