io-writesb.S 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * linux/arch/arm/lib/io-writesb.S
  4. *
  5. * Copyright (C) 1995-2000 Russell King
  6. */
  7. #include <linux/linkage.h>
  8. #include <asm/assembler.h>
  9. .macro outword, rd
  10. #ifndef __ARMEB__
  11. strb \rd, [r0]
  12. mov \rd, \rd, lsr #8
  13. strb \rd, [r0]
  14. mov \rd, \rd, lsr #8
  15. strb \rd, [r0]
  16. mov \rd, \rd, lsr #8
  17. strb \rd, [r0]
  18. #else
  19. mov lr, \rd, lsr #24
  20. strb lr, [r0]
  21. mov lr, \rd, lsr #16
  22. strb lr, [r0]
  23. mov lr, \rd, lsr #8
  24. strb lr, [r0]
  25. strb \rd, [r0]
  26. #endif
  27. .endm
  28. .Loutsb_align: rsb ip, ip, #4
  29. cmp ip, r2
  30. movgt ip, r2
  31. cmp ip, #2
  32. ldrb r3, [r1], #1
  33. strb r3, [r0]
  34. ldrbge r3, [r1], #1
  35. strbge r3, [r0]
  36. ldrbgt r3, [r1], #1
  37. strbgt r3, [r0]
  38. subs r2, r2, ip
  39. bne .Loutsb_aligned
  40. ENTRY(__raw_writesb)
  41. teq r2, #0 @ do we have to check for the zero len?
  42. reteq lr
  43. ands ip, r1, #3
  44. bne .Loutsb_align
  45. .Loutsb_aligned:
  46. stmfd sp!, {r4, r5, lr}
  47. subs r2, r2, #16
  48. bmi .Loutsb_no_16
  49. .Loutsb_16_lp: ldmia r1!, {r3, r4, r5, ip}
  50. outword r3
  51. outword r4
  52. outword r5
  53. outword ip
  54. subs r2, r2, #16
  55. bpl .Loutsb_16_lp
  56. tst r2, #15
  57. ldmfdeq sp!, {r4, r5, pc}
  58. .Loutsb_no_16: tst r2, #8
  59. beq .Loutsb_no_8
  60. ldmia r1!, {r3, r4}
  61. outword r3
  62. outword r4
  63. .Loutsb_no_8: tst r2, #4
  64. beq .Loutsb_no_4
  65. ldr r3, [r1], #4
  66. outword r3
  67. .Loutsb_no_4: ands r2, r2, #3
  68. ldmfdeq sp!, {r4, r5, pc}
  69. cmp r2, #2
  70. ldrb r3, [r1], #1
  71. strb r3, [r0]
  72. ldrbge r3, [r1], #1
  73. strbge r3, [r0]
  74. ldrbgt r3, [r1]
  75. strbgt r3, [r0]
  76. ldmfd sp!, {r4, r5, pc}
  77. ENDPROC(__raw_writesb)