some conditional op emulation
[ginge.git] / loader / emu_arm.s
1 @ vim:filetype=armasm
2 .text
3
4 @ save registers and flags and call emu_handle_op
5 @ r0 and r14 must be saved by caller, r0 is arg for handle_op
6 @ on return everything is restored except lr, which is used to return
7
8 .globl emu_call_handle_op
9 emu_call_handle_op:
10     str   sp, [sp, #(-0xf00 + 4*13)]
11     sub   sp, sp, #0xf00
12     add   sp, sp, #4
13     stmia sp, {r1-r12}
14     sub   sp, sp, #4
15     mrs   r2, cpsr
16     mov   r1, sp
17     str   r2, [sp, #4*15]
18     mov   r4, lr
19     bl    emu_handle_op
20     ldr   r1, [sp, #4*15]
21     mov   lr, r4
22     msr   cpsr_f, r1
23     ldmia sp, {r0-r13}
24     bx    lr
25