Есть ли способ отключить передаваемые аргументы функции в регистры, используя gcc 3.3.1 для ARM?аргумент функции в регистре
2
A
ответ
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-битные значения в регистрах. –
Не то, чтобы я знал. Но это gcc - если вы готовы немного поработать, вы можете изменить источник. Не для непосвященных. Вы знаете, что это приведет к тому, что ваш код нарушит ARM EABI (встроенный двоичный интерфейс приложения), правильно? – Dan
+1 @Dan. Можете ли вы объяснить, почему вы хотите это сделать? –
Я столкнулся с подобной ситуацией. Моя проблема в том, что я передаю несколько параметров структуры в asm-функцию. Половина первой структуры ветвится в r3, а все остальное находится в стеке. Это гораздо удобнее, если все структуры одинаковы (т. Е. В стеке). –