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