view src/asm.S @ 51:ccd59cd9ee45

author Takahiro SHIMIZU <>
date Mon, 17 Dec 2018 19:48:57 +0900
parents 83c23a36980d
line wrap: on
line source

#include "arm.h"

.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
    # 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
    MOV     r0, fp
    bx      lr