copy_page.S 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * linux/arch/arm26/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 <asm/assembler.h>
  14. #include <asm/asm-offsets.h>
  15. .text
  16. .align 5
  17. /*
  18. * ARMv3 optimised copy_user_page
  19. *
  20. * FIXME: rmk do we need to handle cache stuff...
  21. * FIXME: im is this right on ARM26?
  22. */
  23. ENTRY(__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. LOADREGS(fd, sp!, {r4, pc}) @ 3
  38. .align 5
  39. /*
  40. * ARMv3 optimised clear_user_page
  41. *
  42. * FIXME: rmk do we need to handle cache stuff...
  43. */
  44. ENTRY(__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. .section ".init.text", #alloc, #execinstr