tu parles
l'optimisation n'existe pas
c'est comme x+=1; x=x+1; et x++; le code généré sera addq #1,dx.. (je pense..)
pour les exemples que tu as donné, le code généré sera effectivement addq #1,dx, mais pour la boucle for c différent puisque les 2 instructions n'ont pas le même rôle :
move.w n,d0 beq quit loop subq.w #1,d0 ... code de la boucle ... tst.w d0 bne loop
move.w n,d0 | subq.w #1,d0 | bcc quit (ou bien beq quit si le compilo optimise bien) loop ... code de la boucle ... dbf d0,loop
(j'avais vraiment été impressionné quand j'avais vu la qualité du code généré avec un source pas du tout optimisé, style il est capable d'utiliser (a0)+ quand tu lui demandes de faire for (i=0;i<n;i++) printf("%d",tab[i]), et ensuite comme i est plus utilisé il te le transforme en for (i=n;i--; )
)
)


Pollux
a écrit : Et par pitié pour GTC ne faites pas i=nbre_perso; i--; parce que GTC n'optimise pas les expressions séparées (because ça ralentirait énormément)
Pollux a écrit :
mais en tout cas le seul compilo que je connaisse qui fasse ça est Visual C++ (et puis si tu fais une boucle style for (i=0;i<n;i++) func(tab[i]), il remplace tab[i] par *p++)
Et puis la plupart des programmeurs qui utilisent for utilisent aussi tab[i] plutôt que *p++, donc ça peut pas être optimisé par le compilo
#define USE_TI89
#include <tigcclib.h>
char tab[100];
void _main(void)
{
int i,n=100;
char *p=tab;
for (i=0;i<n;i++) printf("%d",p[[b][/b]i]);
}
clr.w %d3 lea tab,%a2 .even .L6: move.b (%a2)+,%d1 ext.w %d1 move.w %d1,-(%sp) pea .LC0 jbsr printf addq.l #6,%sp addq.w #1,%d3 cmp.w #100,%d3 jblt .L6
nEUrOne a écrit :
de tt facon, VS utilise le compilo intel il me semble ... qui est un excellent compilo