You should replace all instances of __asm with a macro, say _ASM or ASM that you can conditionally #define depending on the compiler.
Alternatively, as long as you know your target compilers regular calling mechanism, there is no need to define the function in any special way.
Assuming the compiler does the standard 'push args onto stack, then push return address onto stack' you can simply modify the asm code itself to properly save/restore whatever registers it clobbers, retrieve the args from the updated stack pointer and then do its stuff.
You can then leave the function declaration as a normal C one.
This approach does absolutely depend on knowing the compilers calling/return mechanism.
I cant say about gcc-680x0 without checking but, the normal convention for 680x0 is to push the args onto the stack (remember this is done with a predecrement mode, -(sp)) in the order they appear in the call. Bytes are padded out to words (to keep alignment) and lastly the return address is pushed.
For returns, integers are usually returned in d0 (or d0/d1 for long long), pointers in a0 and floats in fp0.
This approach is not portable amongst all compilers however (again it depends on calling mechanisms used).
I would say it is better to persuade the compiler to accept the asm as it is rather than changing the asm to suit the compiler...