Good

I have no experience at all with Arm assembler code, but I'm wondering why you return manually, i.e. the "bx lr". That means the compiler gets no chance to clean up the stack frame.

It looks a good idea to use the BIOS as much as possible on the GBA since memory is tight. You can add this code to system.pas for the gba, put this in system.pp:

[pascal]
{$DEFINE FPC_SYSTEM_HAS_MOD_LONGINT}
function fpc_mod_longint(n,z : longint) : longint;[public,alias:'FPC_MOD_LONGINT'];compilerproc;assembler
asm
swi #0x060000
mov r0, r1
bx lr
end;
[/pascal]

... and the compiler should use it.

You can even try to inline it, since the code is so short that a procedure call is already overhead. I don't know if inlining this procedure will actually work (the compiler might assume that it should be able to call the helper), you woud have to check that.