3d3fa63b |
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 | |