/** * \file * * * \author Bernie Innocenti * * \brief PowerPC context switch */ #ifdef __APPLE__ //This workaround is necessary to compile under OS X assembler. #define SWITCH_CONTEXT _asm_switch_context #else #define SWITCH_CONTEXT asm_switch_context #endif .balign 4 /* void asm_switch_context(void ** new_sp, void ** save_sp) */ /* r3 r4 */ .globl SWITCH_CONTEXT SWITCH_CONTEXT: mflr 0 /* r0 = lr */ stw 0,8(1) /* store lr at *(sp+8) */ stw 1,0(4) /* *save_sp = sp */ lwz 1,0(3) /* sp = *new_sp */ lwz 0,8(1) /* retrieve lr from *(sp+8) */ mtlr 0 /* lr = r0 */ blr /* return */