Je suis actuellement en train d'écrire un compiler et j'ai l'impression d'avoir eu quelques problèmes pour l'obtenir en code de sortie qui s'exécute dans un délai décent.Quelles sont quelques astuces pour optimiser le code d'assemblage généré par un compilateur?
Un bref aperçu du compilateur:
7Basic est un compilateur qui vise à compiler le code 7Basic directement en code machine pour l'architecture cible/plate-forme. Actuellement, 7Basic génère un assemblage x86 avec un fichier source.
Le problème est que le code assembleur généré par le compilateur est lent et inefficace.
Par exemple, le code this (qui se compile jusqu'au code d'assembly this) est 80,47 fois plus long à exécuter que the equivalent C code.
Une partie du problème est que le compilateur génère le code comme le suivant:
push eax
push 5000000
pop ebx
pop eax
Au lieu de plus logique:
mov ebx,5000000
... qui accomplit la même chose.
Ma question est: quelles sont les techniques pour éviter ce genre de problème? L'analyseur utilise essentiellement récursion pour analyser les expressions, de sorte que le code généré reflète cela.
Ajoutez -O3 à votre ligne de commande du compilateur ;-) – hirschhornsalz
+1 @drhirsch LOL – karlphillip
"... un compilateur ** BASIC ** multi-plateforme qui génère des exécutables ** Win32 ** natifs." Attends quoi? –