X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=loader%2Femu_arm.s;fp=loader%2Femu_arm.s;h=aa0d63fcd5b66f7fd0357df6ae8d9d13c70885b3;hb=3d3fa63bc1cc6a6b678a958f6c60a7c24f117dca;hp=0000000000000000000000000000000000000000;hpb=7fd42181a7f66b4403076cd9de98e18140a7eaf8;p=ginge.git diff --git a/loader/emu_arm.s b/loader/emu_arm.s new file mode 100644 index 0000000..aa0d63f --- /dev/null +++ b/loader/emu_arm.s @@ -0,0 +1,25 @@ +@ vim:filetype=armasm +.text + +@ save registers and flags and call emu_handle_op +@ r0 and r14 must be saved by caller, r0 is arg for handle_op +@ on return everything is restored except lr, which is used to return + +.globl emu_call_handle_op +emu_call_handle_op: + str sp, [sp, #(-0xf00 + 4*13)] + sub sp, sp, #0xf00 + add sp, sp, #4 + stmia sp, {r1-r12} + sub sp, sp, #4 + mrs r2, cpsr + mov r1, sp + str r2, [sp, #4*15] + mov r4, lr + bl emu_handle_op + ldr r1, [sp, #4*15] + mov lr, r4 + msr cpsr_f, r1 + ldmia sp, {r0-r13} + bx lr +