One problem with "inline assembler" is it throws you pretty quickly into the morass of vendor differences in compiler syntax and behavior. (well, also true of pure assembler, I guess...)
The SVC case looks especially annoying; I'd *like* the compiler to treat the SVC instruction the same way it treats BL; so that a C function "__svc(arg1, arg2, arg3, arg4, arg5, arg6...) starts by moving arguments into registers, and then sets up a stack frame if there are too many arguments, and the finally does the SVC instruction where it might have done BL for a normal function. But if I make it inline, then the argument behavior will change, and if I make it a normal function it won't be inlined the way I want, so...
You'll want to be sitting down (with a stiff cocktail in hand) before looking at the code, though
yeah. THAT happens.