Mercurial > hg > Members > tobaru > CbC_xv6
diff src/asm.S @ 0:83c23a36980d
Init
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 26 May 2017 23:11:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/asm.S Fri May 26 23:11:05 2017 +0900 @@ -0,0 +1,32 @@ +#include "arm.h" + +.text +.code 32 + +.global set_stk +.global get_fp + +# set the stack for IRQ mode, we can use r0-r3 for free +# input: r0 - #mode, r1 - stk +set_stk: + # switch to the IRQ mode + MRS r2, cpsr + BIC r2, r2, #MODE_MASK + ORR r2, r2, r0 + MSR cpsr_cxsf, r2 + + # set the stack pointer, sp register is banked, so we need to switch mode + MOV sp, r1 + + # switch back to the SVC mode + BIC r2, r2, #MODE_MASK + ORR r2, r2, #SVC_MODE + MSR cpsr_cxsf, r2 + + # return + bx lr + +# return the frame pointer for the current function +get_fp: + MOV r0, fp + bx lr \ No newline at end of file