2010-05-07 7 views
2

Existe-t-il un moyen de désactiver les arguments de fonction de passage dans les registres utilisant gcc 3.3.1 pour ARM?argument de fonction dans le registre

+1

Pas que je sache. Mais c'est gcc - si vous êtes prêt à faire un peu de travail, vous pouvez modifier la source. Pas pour les non-initiés cependant. Vous êtes conscient que votre code violera l'EABI ARM (interface binaire d'application intégrée), n'est-ce pas? – Dan

+1

+1 @Dan. Pouvez-vous expliquer pourquoi vous voulez faire cela? –

+0

J'ai rencontré une situation similaire. Mon problème est que je passe plusieurs paramètres de structure à une fonction asm. La moitié de la première structure se termine en r3, et tout le reste est sur la pile. C'est beaucoup plus pratique si toutes les structures sont les mêmes (c'est-à-dire sur la pile). –

Répondre

2

Oui. Je vois dwelch a donné une réponse globale, mais si vous souhaitez le faire sur une base fonction par fonction, puis utilisez le gcc __attribute__ avec regparm. iirc, il devrait ressembler à ceci:

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

Peut-être l'une de ces options est ce que vous cherchez

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

sinon, et s'il y a quelque chose qu'il, serait probablement une option de compilation (quand est compilé gcc).

+0

Ce ne sont que de petites variantes de l'ABI de base. Ils passent tous les 4 premières valeurs 32bit dans les registres. –

Questions connexes