> Si tu utilises une syntaxe incompatible, ça ne sert strictement à rien, autant ne pas les mettre du tout!
N'importe quoi...
> Il faudra vraiment que tu adaptes ta syntaxe asm pour la faire correspondre à celle de GCC!
Je t'ai déjà expliqué pourquoi je ne le ferai pas, je ne le répèterai pas 100 fois
> on peut aussi déclarer une "local register variable" dans un bloc
OK.
> Mais les "global register variables" sont quand-même utilisées assez souvent.
Tu as des exemples autres que OPTIMIZE_ROM_CALLS? Franchement je trouve ça très très gore, et ça limite le compilo alors que ces registres pourraient être utilisées dans les fonctions n'utilisant pas cette variable (sauf à faire plusieurs fichiers, mais c vraiment pas top comme solution).
> D'ailleurs, je me demande où tu as pris ta liste d'extensions, parce que dans la documentation actuelle de TIGCC, il y a: "Binary Numbers".
TIGCC Lib 2.5 (celle de TIGCC 0.94 beta 18)
> Ça manque dans ta liste. Il manque aussi "Multi-Line String Literals" dans ta liste. Ça a été retiré dans FSF GCC 3.3, mais je l'ai remis dans le patch TIGCC, et nous n'avons aucune intention de le retirer, donc ça devrait figurer sur ta liste.
Les deux sont supportés (je ne suis pas entièrement sûr pour multi-line string literals, mais il n'y a pas de raison que ça ne marche pas)
> Et je n'ai pas vérifié qu'il n'y ait pas d'autres omissions dans ta liste.
Je n'en ai pas omis par rapport à ma version de la doc.
> > il me semble que les prototypes du style:
> > fonction(short x asm("d0"), short y asm("d1")) sont suportés non? Car ca c'est vraiment indispensable
> Justement non! C'est une des raisons pour lesquelles je dis que GTC sera inutilisable!
C'est indispensable de pouvoir mettre x dans d0 et y dans d1, effectivement. La syntaxe n'est pas supportée, mais il suffit de faire __attribute__((regparm(2,0))) pour que GTC le fasse automatiquement. GTC (comme TIGCC) alloue les registres par ordre croissant, dans les Dn pour les scalaires et dans les An pour les pointeurs, et continue dans l'autre type de registre s'il n'y a plus de place, et enfin s'il n'y en a plus du tout, il met sur la pile.
Par exemple :
void __attribute__((regparm(2,2))) fonction(int x,int y,void *port,int color,void *data);
=>
void fonction(int x asm("d0"),int y asm("d1"),void *port asm("a0"),int color asm("a1"),void *data /* sur la pile */);
Mais je vais voir si je ne vais pas supporter cette syntaxe pour les registres d0-d2/a0-a1.
> Peut-être, mais elle n'est pas égale à 0, et c'est ce qui compte!
Oui, et la probabilité pour que TIGCC 0.95 soit un fake, et qu'en réalité vous soyez une organisation occulte visant à prendre le contrôle de tigcc.ticalc.org, supprimer toutes les sources du serveur, et enfin faire une opération commando pour supprimer les sources de TIGCC de tous les ordinateurs la possédant - tout ça pour relancer les ventes de casio - est strictement positive. C'est vrai que ça aussi, c'est une hypothèse à ne pas écarter! Méfiez-vous...
> S'il suffit de 5 minutes pour supprimer l'utilisation d'une extension, autant ne pas utiliser cette extension dès le départ, et donc autant ne pas la permettre dans le compilateur!
Alors dans la prochaine version de TIGCC mettez un warning non désactivable si on utilise une extension qui n'est pas prévue d'être implémentée dans GTC
> Je n'ai jamais dit qu'on met tous les 200 KO dans la RAM en même temps!
Mais en archive...
> > un code source et de la place pour l'exectutable, si on a en plus on a d'autre prog sur ca calc, ca commence a faire limité.
> Ben, si on veut développer un gros projet on-calc, on ne devrait pas s'étonner de ne pas avoir la place pour d'autres programmes. C'est une des raisons pour lesquelles je dis que la programmation on-calc n'est pas une bonne idée en pratique.
Sauf que GTC ne prend que 100 ko donc c'est une bonne idée, d'où l'intérêt de ne pas avoir un compilo de 200 ko. Dommage, bien essayé
> Je pense plutôt aux fonctionnalités qui n'y sont pas parce que tu n'as pas trouvé d'implémentation compacte, pas aux fonctionnalités qui y sont. (Cf. contexte de la citation.)
Alors toutes les fonctionnalités déjà implémentées sont super-optimisées et celles qui ne sont pas programmées pourraient être implémenté de manière 10x plus petite? Bizarre...
> Tu en as déjà une: asm("")!
Sauf que si je mets de l'assembleur syntaxe GTC sous un asm("") vous allez pas être contents

(et moi non plus d'ailleurs)
> Il n'y a pas de "problème". C'est juste que quelqu'un pourrait avoir un algorithme efficace auquel tu n'as pas pensé pour implémenter une extension.
J'attends les suggestions
> Tu n'as jamais programmé quoi que ce soit qui nécessite beaucoup de calculs apparemment. Par exemple, si on veut de la virgule fixe avec une grande précision, les long longs sont indispensables.
Oui. Alors on utilise TI-GCC, de l'assembleur ou des structures pour le développement on-calc en attendant de recompiler avec TIGCC

Et puis il suffit de compiler le module qui nécessite ces calculs avec TIGCC, pas besoin de tout compiler avec TIGCC.
> À titre d'exemple, au lieu d'avoir un add.l et un addx.l pour faire la somme, on aura une demi-douzaine d'instructions pour tester le débordement du long de poids faible.
move.l (a0),d0
add.l d0,(a1)
move.l 4(a0),d0
addx.l d0,4(a1)
4 au lieu de 2, et de toutes façons c'est ce que TI-GCC fera s'il n'a pas assez de registres (2 registres par variable ça fait bcp...)
> Donc tu refuses d'implémenter le standard C, donc ton compilateur n'est pas un compilateur C. Appelle-le comme tu veux, mais pas "compilateur C".
TIGCC accepte ({0;}) qui est du code C invalide, donc ce n'est pas un compilateur C non plus

(et le mode "compilateur C" comme tu dis ne fonctionne pas avec TIGCC)
> Et que j'utilise ça dans mes programmes.
Ca doit être loin d'être indispensable, et très facile à contourner. Ou alors donne-moi un exemple
> > soit parce qu'elles n'ont jamais et/ou ne seront certainement jamais utilisées...
> Ca non plus. (Désolé, mais dès qu'une extension existe, il y a toujours quelqu'un pour l'utiliser.)
Trouve moi un seul prog sur ticalc.org qui l'utilise (et qui ne soit pas de toi

)
> > Non. Quel est l'intérêt?
> Que c'est prévu par le standard.
Désolé mais ça ne sert absolument à rien sur TI, donc je ne l'implémente pas. Je n'en ai rien à faire d'avoir le certificat "ISO C99". Tout ce que je veux c'est que ça soit facile de programmer sous GTC et de porter des programmes vers GTC.
> Les directives d'alignement s'appliquent tout à fait! Par exemple, __attribute__((aligned(2))) char x[4]="toto"; qui permet d'utiliser un move.l pour lire les 4 octets. Et il y a aussi d'autres attributs qui s'appliquent. Par exemple __attribute__((may_alias)), qui a été introduit avec GCC 3.3, et qui se retrouvera de partout dans les nouvelles sources (y compris nos headers), parce que GCC 3.3 donne un warning quand on ne respecte pas les règles de "strict aliasing".
Si tu veux je peux supporter __attribute__((aligned))
Et __attribute__((may_alias)) n'a aucun sens pour GTC (mais il a tout de même le comportement attendu)