diff options
| author | Damien | 2013-10-22 21:13:59 +0100 |
|---|---|---|
| committer | Damien | 2013-10-22 21:13:59 +0100 |
| commit | 9d63932b3d82752e83281dacead20d412b9e34bb (patch) | |
| tree | c867afe19e681c7067d8f6df0a6ddf91d4a33f26 /stm | |
| parent | 0c5827fc654b7722964483f58600e129e21c1013 (diff) | |
Add gchelper.s, to load registers and clean stack for GC.
Diffstat (limited to 'stm')
| -rw-r--r-- | stm/gchelper.s | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/stm/gchelper.s b/stm/gchelper.s new file mode 100644 index 000000000..af19cc911 --- /dev/null +++ b/stm/gchelper.s @@ -0,0 +1,36 @@ + .syntax unified + .cpu cortex-m4 + .thumb + .text + .align 2 + +@ void gc_helper_get_regs_and_clean_stack(r0=uint regs[10], r1=heap_end) + .global gc_helper_get_regs_and_clean_stack + .thumb + .thumb_func + .type gc_helper_get_regs_and_clean_stack, %function +gc_helper_get_regs_and_clean_stack: + @ store registers into given array + str r4, [r0], #4 + str r5, [r0], #4 + str r6, [r0], #4 + str r7, [r0], #4 + str r8, [r0], #4 + str r9, [r0], #4 + str r10, [r0], #4 + str r11, [r0], #4 + str r12, [r0], #4 + str r13, [r0], #4 + + @ clean the stack from given pointer up to current sp + movs r0, #0 + mov r2, sp + b .entry +.loop: + str r0, [r1], #4 +.entry: + cmp r1, r2 + bcc .loop + bx lr + + .size gc_helper_get_regs_and_clean_stack, .-gc_helper_get_regs_and_clean_stack |
