#define ao_arch_init_stack(task, start) do { \
uint32_t *sp = (uint32_t *) (task->stack + AO_STACK_SIZE); \
#define ao_arch_init_stack(task, start) do { \
uint32_t *sp = (uint32_t *) (task->stack + AO_STACK_SIZE); \
task->sp = sp; \
} while (0);
#define ao_arch_save_regs() do { \
asm("push {r0-r12,lr}\n"); \
cli(); \
task->sp = sp; \
} while (0);
#define ao_arch_save_regs() do { \
asm("push {r0-r12,lr}\n"); \
cli(); \
uint32_t sp; \
asm("mov %0,sp" : "=&r" (sp) ); \
ao_cur_task->sp = (uint32_t *) (sp); \
uint32_t sp; \
asm("mov %0,sp" : "=&r" (sp) ); \
ao_cur_task->sp = (uint32_t *) (sp); \
sp = (uint32_t) ao_cur_task->sp; \
cli(); \
asm("mov sp, %0" : : "r" (sp) ); \
sp = (uint32_t) ao_cur_task->sp; \
cli(); \
asm("mov sp, %0" : : "r" (sp) ); \