memcpy.S 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2013 ARM Ltd.
  4. * Copyright (C) 2013 Linaro.
  5. *
  6. * This code is based on glibc cortex strings work originally authored by Linaro
  7. * be found @
  8. *
  9. * http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/
  10. * files/head:/src/aarch64/
  11. */
  12. #include <linux/linkage.h>
  13. #include <asm/assembler.h>
  14. #include <asm/cache.h>
  15. /*
  16. * Copy a buffer from src to dest (alignment handled by the hardware)
  17. *
  18. * Parameters:
  19. * x0 - dest
  20. * x1 - src
  21. * x2 - n
  22. * Returns:
  23. * x0 - dest
  24. */
  25. .macro ldrb1 reg, ptr, val
  26. ldrb \reg, [\ptr], \val
  27. .endm
  28. .macro strb1 reg, ptr, val
  29. strb \reg, [\ptr], \val
  30. .endm
  31. .macro ldrh1 reg, ptr, val
  32. ldrh \reg, [\ptr], \val
  33. .endm
  34. .macro strh1 reg, ptr, val
  35. strh \reg, [\ptr], \val
  36. .endm
  37. .macro ldr1 reg, ptr, val
  38. ldr \reg, [\ptr], \val
  39. .endm
  40. .macro str1 reg, ptr, val
  41. str \reg, [\ptr], \val
  42. .endm
  43. .macro ldp1 reg1, reg2, ptr, val
  44. ldp \reg1, \reg2, [\ptr], \val
  45. .endm
  46. .macro stp1 reg1, reg2, ptr, val
  47. stp \reg1, \reg2, [\ptr], \val
  48. .endm
  49. SYM_FUNC_START_ALIAS(__memcpy)
  50. SYM_FUNC_START_WEAK_PI(memcpy)
  51. #include "copy_template.S"
  52. ret
  53. SYM_FUNC_END_PI(memcpy)
  54. EXPORT_SYMBOL(memcpy)
  55. SYM_FUNC_END_ALIAS(__memcpy)
  56. EXPORT_SYMBOL(__memcpy)