diff options
Diffstat (limited to 'coroutine/arm32/Context.S')
| -rw-r--r-- | coroutine/arm32/Context.S | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/coroutine/arm32/Context.S b/coroutine/arm32/Context.S new file mode 100644 index 0000000000..945e4f82d5 --- /dev/null +++ b/coroutine/arm32/Context.S @@ -0,0 +1,32 @@ +## +## This file is part of the "Coroutine" project and released under the MIT License. +## +## Created by Samuel Williams on 10/5/2018. +## Copyright, 2018, by Samuel Williams. +## + +#define TOKEN_PASTE(x,y) x##y + +.file "Context.S" +.text +.globl PREFIXED_SYMBOL(coroutine_transfer) +.align 2 +.type PREFIXED_SYMBOL(coroutine_transfer),%function +.syntax unified + +PREFIXED_SYMBOL(coroutine_transfer): + # Save caller state (8 registers + return address) + push {r4-r11,lr} + + # Save caller stack pointer + str sp, [r0] + + # Restore callee stack pointer + ldr sp, [r1] + + # Restore callee state (8 registers program counter) + pop {r4-r11,pc} + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif |
