2010-05-07 3 views
2

Есть ли способ отключить передаваемые аргументы функции в регистры, используя gcc 3.3.1 для ARM?аргумент функции в регистре

+1

Не то, чтобы я знал. Но это gcc - если вы готовы немного поработать, вы можете изменить источник. Не для непосвященных. Вы знаете, что это приведет к тому, что ваш код нарушит ARM EABI (встроенный двоичный интерфейс приложения), правильно? – Dan

+1

+1 @Dan. Можете ли вы объяснить, почему вы хотите это сделать? –

+0

Я столкнулся с подобной ситуацией. Моя проблема в том, что я передаю несколько параметров структуры в asm-функцию. Половина первой структуры ветвится в r3, а все остальное находится в стеке. Это гораздо удобнее, если все структуры одинаковы (т. Е. В стеке). –

ответ

2

Да. Я вижу, что dwelch дал глобальный ответ, но если вы хотите сделать это на основе функции, используйте gcc __attribute__ с regparm. iirc, это должно выглядеть так:

int __attribute__((regparm(0))) function(int a, char b) { ... } 
0

Возможно, один из этих вариантов является то, что вы ищете

 
-mabi=name 
Generate code for the specified ABI. Permissible values are: `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 

если нет, и если есть что-то это, вероятно, будет вариант во время компиляции (при компиляции GCC).

+0

Это всего лишь небольшие варианты базы ABI. Все они передают первые 4 32-битные значения в регистрах. –

Смежные вопросы