Bonjour !
Aujourd'hui je me suis amusé à regarder comment GCC traduisait l'opération suivante:
Et j'ai vu qu'il utilisait la methode suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part i*=-1;
J'ai ensuite testé sur une autre machine avec une version plus récente de GCC et obtenu un résultat totalement différent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 movl $123, -4(%ebp) movl -4(%ebp), %edx movl $0, %eax subl %edx, %eax
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 movl $123, -8(%ebp) negl -8(%ebp)
D'ou mes questions:
- Comment GCC, même dans une vieille version a t-il pu passer à coté d'un opcode comme negl qui semble bien plus adéquat à l'opération originale (en C) ?
- Tenir sa version de GCC extremement à jour améliore t-il significativement la pertinence des opcodes, et par conséquent la rapidité d'execution des programmes qu'il produit ?
Greg
Partager