X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fhw%2Fswitch_ctx_arm.S;fp=bertos%2Fcpu%2Farm%2Fhw%2Fswitch_ctx_arm.S;h=bde843cda734cd14ed7066fcb69dfa096dc2c4b2;hb=71743c2a5a8bf9dbf66a945fd9656baed0d16329;hp=0000000000000000000000000000000000000000;hpb=ba2ba183c492049aface3e3d4e1d5f945b43f3d6;p=bertos.git diff --git a/bertos/cpu/arm/hw/switch_ctx_arm.S b/bertos/cpu/arm/hw/switch_ctx_arm.S new file mode 100644 index 00000000..bde843cd --- /dev/null +++ b/bertos/cpu/arm/hw/switch_ctx_arm.S @@ -0,0 +1,53 @@ +/** + * \file + * + * + * \brief ARM context switch + * + * \version $Id: proc.c 18271 2007-10-11 14:51:31Z batt $ + * + * \author Stefano Fedrigo + * \author Francesco Sacchi + */ + +/* void asm_switch_context(void **new_sp [r0], void **save_sp [r1]) */ +.globl asm_switch_context +asm_switch_context: + mrs r2, cpsr /* Save status. */ + stmfd sp!, {r2, r4-r11, lr} /* Save registers. */ + + str sp, [r1] /* Save old stack pointer. */ + ldr sp, [r0] /* Load new stack pointer */ + + ldmfd sp!, {r2, r4-r11, lr} /* Load new registers. */ + msr cpsr, r2 /* restore flags reg. */ + + mov pc, lr