string.S 878 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) 2013-2014 Wind River Systems, Inc.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file
  8. * @brief string
  9. *
  10. * Memory and string code for libc.
  11. */
  12. #include <toolchain.h>
  13. _ASM_FILE_PROLOGUE
  14. GTEXT(memcpy32)
  15. GTEXT(memset32)
  16. /**
  17. *
  18. * @brief Copy N * 32bytes in memory
  19. *
  20. * @return pointer to start of destination buffer
  21. */
  22. SECTION_SUBSEC_FUNC(text,_libc_string_section,memcpy32)
  23. push {r4-r10}
  24. memcpy32_loop:
  25. ldm r1!,{r3-r10}
  26. subs r2,r2,#1
  27. stm r0!,{r3-r10}
  28. cmp r2,#0
  29. bne memcpy32_loop
  30. pop {r4-r10}
  31. bx lr
  32. /**
  33. *
  34. * @brief Set N * 32bytes in memory
  35. *
  36. * @return pointer to start of buffer
  37. */
  38. SECTION_SUBSEC_FUNC(text,_libc_string_section,memset32)
  39. push {r4-r9}
  40. mov r3,r1
  41. mov r4,r1
  42. mov r5,r1
  43. mov r6,r1
  44. mov r7,r1
  45. mov r8,r1
  46. mov r9,r1
  47. memset32_loop:
  48. subs r2,r2,#1
  49. stm r0!,{r1,r3-r9}
  50. cmp r2,#0
  51. bne memset32_loop
  52. pop {r4-r9}
  53. bx lr