copypage-v3.S 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * linux/arch/arm/lib/copypage.S
  3. *
  4. * Copyright (C) 1995-1999 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. * ASM optimised string functions
  11. */
  12. #include <linux/linkage.h>
  13. #include <linux/init.h>
  14. #include <asm/assembler.h>
  15. #include <asm/asm-offsets.h>
  16. .text
  17. .align 5
  18. /*
  19. * ARMv3 optimised copy_user_page
  20. *
  21. * FIXME: do we need to handle cache stuff...
  22. */
  23. ENTRY(v3_copy_user_page)
  24. stmfd sp!, {r4, lr} @ 2
  25. mov r2, #PAGE_SZ/64 @ 1
  26. ldmia r1!, {r3, r4, ip, lr} @ 4+1
  27. 1: stmia r0!, {r3, r4, ip, lr} @ 4
  28. ldmia r1!, {r3, r4, ip, lr} @ 4+1
  29. stmia r0!, {r3, r4, ip, lr} @ 4
  30. ldmia r1!, {r3, r4, ip, lr} @ 4+1
  31. stmia r0!, {r3, r4, ip, lr} @ 4
  32. ldmia r1!, {r3, r4, ip, lr} @ 4
  33. subs r2, r2, #1 @ 1
  34. stmia r0!, {r3, r4, ip, lr} @ 4
  35. ldmneia r1!, {r3, r4, ip, lr} @ 4
  36. bne 1b @ 1
  37. ldmfd sp!, {r4, pc} @ 3
  38. .align 5
  39. /*
  40. * ARMv3 optimised clear_user_page
  41. *
  42. * FIXME: do we need to handle cache stuff...
  43. */
  44. ENTRY(v3_clear_user_page)
  45. str lr, [sp, #-4]!
  46. mov r1, #PAGE_SZ/64 @ 1
  47. mov r2, #0 @ 1
  48. mov r3, #0 @ 1
  49. mov ip, #0 @ 1
  50. mov lr, #0 @ 1
  51. 1: stmia r0!, {r2, r3, ip, lr} @ 4
  52. stmia r0!, {r2, r3, ip, lr} @ 4
  53. stmia r0!, {r2, r3, ip, lr} @ 4
  54. stmia r0!, {r2, r3, ip, lr} @ 4
  55. subs r1, r1, #1 @ 1
  56. bne 1b @ 1
  57. ldr pc, [sp], #4
  58. __INITDATA
  59. .type v3_user_fns, #object
  60. ENTRY(v3_user_fns)
  61. .long v3_clear_user_page
  62. .long v3_copy_user_page
  63. .size v3_user_fns, . - v3_user_fns