__inline__ int swi(int i, int p)
{
register int pp __asm__("r1") = p;
register int res __asm__("r0");
__asm__ volatile ("swi 0x12345" : "=r"(res) : "0"(i), "r"(pp));
return res;
}
int main()
{
int a = 2;
int b = 5;
return swi(a, b);
}
Да, если система для конкретного вызова что-то меняет в регистрах или памяти, то не забыть указать в asm побочный эффект. Что-то в стиле : «r12», «cc»); Мне попался случай, когда системный вызов менял память и это не было указано, оптимизатор выкинул фортель.