gchelper.s 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. .syntax unified
  2. .cpu cortex-m4
  3. .thumb
  4. .text
  5. .align 2
  6. @ uint gc_helper_get_regs_and_sp(r0=uint regs[10])
  7. .global gc_helper_get_regs_and_sp
  8. .thumb
  9. .thumb_func
  10. .type gc_helper_get_regs_and_sp, %function
  11. gc_helper_get_regs_and_sp:
  12. @ store registers into given array
  13. str r4, [r0], #4
  14. str r5, [r0], #4
  15. str r6, [r0], #4
  16. str r7, [r0], #4
  17. str r8, [r0], #4
  18. str r9, [r0], #4
  19. str r10, [r0], #4
  20. str r11, [r0], #4
  21. str r12, [r0], #4
  22. str r13, [r0], #4
  23. @ return the sp
  24. mov r0, sp
  25. bx lr
  26. @ this next function is now obsolete
  27. .size gc_helper_get_regs_and_clean_stack, .-gc_helper_get_regs_and_clean_stack
  28. @ void gc_helper_get_regs_and_clean_stack(r0=uint regs[10], r1=heap_end)
  29. .global gc_helper_get_regs_and_clean_stack
  30. .thumb
  31. .thumb_func
  32. .type gc_helper_get_regs_and_clean_stack, %function
  33. gc_helper_get_regs_and_clean_stack:
  34. @ store registers into given array
  35. str r4, [r0], #4
  36. str r5, [r0], #4
  37. str r6, [r0], #4
  38. str r7, [r0], #4
  39. str r8, [r0], #4
  40. str r9, [r0], #4
  41. str r10, [r0], #4
  42. str r11, [r0], #4
  43. str r12, [r0], #4
  44. str r13, [r0], #4
  45. @ clean the stack from given pointer up to current sp
  46. movs r0, #0
  47. mov r2, sp
  48. b.n .entry
  49. .loop:
  50. str r0, [r1], #4
  51. .entry:
  52. cmp r1, r2
  53. bcc.n .loop
  54. bx lr
  55. .size gc_helper_get_regs_and_clean_stack, .-gc_helper_get_regs_and_clean_stack