Miles Le 11/02/2002 à 22:06 le passage par paramètres n'est pas encore géré, que je sache, non ?
Non. Mais son workaround marcherait s'il était fait correctement:
#define XPxlTest(x,y) ({register int _d0 asm ("d0")asm("move.w %0,%%d0;move.w %1,%%d1;bsr PxlTest":: "d" (x), "d" (y): "d1" ,"d3", "a0")_d0;})
Je rajoute quand-même que c'est extrêmement sale comme méthode! La manière de récupérer d0 est tout sauf propre. Et puis la manière de passer les arguments est tout sauf efficace. Il faudra vraiment attendre le passage par registres:
#undef PxlTest
extern int PxlTest(unsigned short x asm("d0"),unsigned short y asm("d1"));
#define XPxlTest PxlTest
[edit]Edité par Kevin Kofler le 11-02-2002 à 23:59:53[/edit]
Ça ne dépend que de Sebastian Reichelt. Le patch est prêt!
La sortie d'une nouvelle version (bêta) de TIGCC avec le passage par registres est désormais imminente.
Et j'ai aussi de bonnes nouvelles: le passage par registres automatique (désactivé par défaut pour des raisons de compatibilité, mais activable par -mregparm ou -mregparm=n) peut entraîner des gains de place non négligeables pour des sources en C avec beaucoup de fonctions. Dans TI-Chess, on épargne plus de 1300 octets non compressés (plus de 500 octets compressés). Je rappelle aussi que le passage par registres automatique est en principe indépendant de la spécification explicite des registres (on peut parfaitement utiliser l'un sans l'autre), mais que le patch qu'on a utilisé prévoyait les 2.
La mauvaise nouvelle est que pour être compatibles avec l'option -mregparm, les headers d'une librairie statique doivent déclarer chaque fonction attendant ses paramètres sur la pile avec __attribute__((__stkparm__)). Ça te fera un peu de travail. Mais je répète: ce n'est pas obligé d'être compatible avec -mregparm pour pouvoir utiliser le passage par registres avec spécification explicite.
