У меня есть функция следующим образом:
int foo()
{
asm("swi 1");
}
Базовый обработчик для swi 1 правильно помещает возвращаемое значение в r0, я хочу, чтобы foo () правильно возвращала это значение. ARM-ELF-GCC предупреждает о достижении контроля над недействительной функцией для вышеуказанного.
ARM-ELF-GCC по-прежнему предупреждает следующее:
int foo()
{
asm("swi 1");
return;
}
Вместо этого я прибег к следующему:
int foo()
{
int ret_val;
asm("swi 1");
asm("mov %[v], r0" : [v]"=r"(ret_val) :: "r0", "r3" )
return ret_val;
}
Есть ли более элегантный способ заставить GCC возвращать значение в r0, не прибегая к описанному выше?
Спасибо.