реклама на сайте
подробности

 
 
> Сви прерывания в gcc, переменное количество аргументов??
vova7890
сообщение Nov 20 2010, 07:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Долго искал метод запуска сви на гсс, и недавно нашёл одно единственное решение - инлайновая функция с асм встакой. Так вот оно прокатывает когда есть фиксированное количество аргументов, а вот как быть с переменным? К примеру у меня есть функция 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vova7890
сообщение Nov 20 2010, 20:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



че это не рекомендуется? А че лучше будет когда при вызове сви сначало будет BL на функцию вызова сви (при этом мучая стек, будет передавать параметры), потом сам сви? Не слишком ли много этапов получится? Как раз таки инлайновый вызов будет куда лучше, для 208 мгц. Документацию читал, ничего подобного не находил, иначе б не спрашивал же.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 20 2010, 20:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(vova7890 @ Nov 21 2010, 01:02) *
Как раз таки инлайновый вызов будет куда лучше, для 208 мгц.
А кто вам мешает попросить компилятор проинлайнить эту асм-овую функцию? В то же время, оформив ее именно как отдельную функцию, вы не будете вводить компилятор в заблуждение и мешать ему оптимизировать другое окружение той функции, куда вы инлайните асм.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vova7890   Сви прерывания в gcc   Nov 20 2010, 07:51
- - rezident   А в документации разве не описаны правила передачи...   Nov 20 2010, 19:40
|- - AHTOXA   rezident, gcc умеет оптимизировать asm-вставки. v...   Nov 20 2010, 21:40
|- - vova7890   Цитата(AHTOXA @ Nov 21 2010, 00:40) rezid...   Nov 21 2010, 06:33
- - vova7890   Похоже это невозможно, или никто не знает   Nov 21 2010, 19:48
- - vova7890   блин, и тип double неправильно передаётя... Короче...   Nov 22 2010, 07:59
|- - klen   Цитата(vova7890 @ Nov 22 2010, 10:59) бли...   Nov 24 2010, 19:05
- - vova7890   да вот уже 4-й день никак не придумаю... видимо по...   Nov 25 2010, 10:41
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 25 2010, 12:41) да ...   Nov 25 2010, 11:16
- - vova7890   КАК РАЗОБРАТЬ ЭТИ ПАРАМЕРТЫ ДЛЯ АСМ ВСТАВКИ!...   Nov 25 2010, 13:36
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 25 2010, 15:36) КАК...   Nov 25 2010, 14:21
- - vova7890   А вы думаете я так не пробывал? Не совсем так но ч...   Nov 25 2010, 17:03
- - vova7890   Вот что происходит: Код char *temp = (char*...   Nov 26 2010, 07:39
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 26 2010, 09:39) я е...   Nov 26 2010, 13:49
- - vova7890   Код.text:00000560 EXPORT start .text:0...   Nov 26 2010, 20:46
- - vova7890   Я пробовал уже наверно все что можно, спасибо коне...   Nov 26 2010, 22:12


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 16:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.02344 секунд с 7
ELECTRONIX ©2004-2016