Долго искал метод запуска сви на гсс, и недавно нашёл одно единственное решение - инлайновая функция с асм встакой. Так вот оно прокатывает когда есть фиксированное количество аргументов, а вот как быть с переменным? К примеру у меня есть функция sprintf(char *dst, char *mft, ...) под номером сви 22, как сделать вызов сви на такое? Вот как я делаю с фиксированным количеством аргументов.
Код
static inline long do_SWI1( const int swi_num,
long par0)
{
long ret_val;
asm volatile (
"mov r0, %2 \n\t" \
"swi %1 \n\t" \
"mov %0, r0 \n\t" \
: "=r" (ret_val)
: "n" (swi_num), "r" (par0)
: "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc"
);
return ret_val;
}
В асм вставку можно передавать ва_листы? :-D
Сообщение отредактировал vova7890 - Nov 20 2010, 07:51