/** * \file * * * \brief Cortex-M3 context switch * * \author Andrea Righi */ #include .syntax unified #if !CONFIG_KERN_PREEMPT /* void asm_switch_context(void **new_sp [r0], void **save_sp [r1]) */ .global asm_switch_context .thumb_func asm_switch_context: mrs ip, psp /* Save registers */ stmdb ip!, {r4-r11, lr} /* Save old stack pointer */ str ip, [r1] /* Load new stack pointer */ ldr ip, [r0] /* Load new registers */ ldmia ip!, {r4-r11, lr} msr psp, ip bx lr #endif /* CONFIG_KERN_PREEMPT */