Je rajouterais dans ta description des optimisations (par ailleurs bien vulgarisée :-)), que les nouveaux opcodes ne sont pas les seuls en cause dans l'optimisation. Les processeurs, au fur et à mesure qu'ils évoluent, intègrent de nouvelles fonctionnalités intrasèques (comme le prefech, le branch condition, le pipeline), qui font que quelques instructions générées légèrement différemment par le compilateur tournera plus ou moins vite pour le même processeur, et cette différence n'en sera que plus flagrante entre deux versions de processeurs.
L'exemple très parlant est le double-pipeline introduit avec le Pentium, qui (théoriquement) permet de doubler la cadence des instructions. Ce n'est pas aussi rose, mais on y gagne beaucoup, et l'inversion de deux affectations peut changer la rapidité du proc (lock de registres entre les deux pipelines). Cela est du en partie à l'ordre des instructions et l'utilisation des registres par ces instructions (comme quoi c'est un domaine très précis, ce n'est pas pour rien qu'on dit que l'assembleur est difficile, et surtout pas pour la syntaxe, qui elle, est très simple)
Si on combine tout ça (ces nouveaux 'modes' de fonctionnement, plus les nouveaux opcodes, genre movcc et autres intégrations l'instructions évoluées bien pratiques), un même code peut tourner beaucoup plus vite s'il est optimisé pour un proc récent. Le problème, comme ça a déjà été souligné, c'est qu'il en devient la plupart du temps incompatible avec les procs plus anciens (du i686 sur un i486 ou i586 par exemple).
[^] # Re: Dropline gnome = i686
Posté par riri le breton (site web personnel) . En réponse au journal Gnome et Slackware, c'est fini ?. Évalué à 2.
L'exemple très parlant est le double-pipeline introduit avec le Pentium, qui (théoriquement) permet de doubler la cadence des instructions. Ce n'est pas aussi rose, mais on y gagne beaucoup, et l'inversion de deux affectations peut changer la rapidité du proc (lock de registres entre les deux pipelines). Cela est du en partie à l'ordre des instructions et l'utilisation des registres par ces instructions (comme quoi c'est un domaine très précis, ce n'est pas pour rien qu'on dit que l'assembleur est difficile, et surtout pas pour la syntaxe, qui elle, est très simple)
Si on combine tout ça (ces nouveaux 'modes' de fonctionnement, plus les nouveaux opcodes, genre movcc et autres intégrations l'instructions évoluées bien pratiques), un même code peut tourner beaucoup plus vite s'il est optimisé pour un proc récent. Le problème, comme ça a déjà été souligné, c'est qu'il en devient la plupart du temps incompatible avec les procs plus anciens (du i686 sur un i486 ou i586 par exemple).