Par Wilfrid et Michel
Présentation du compilateur GCC
La suite GCC (GNU Compiler Collection) est un ensemble de
composants concus pour fournir à l'utilisateur la possibilité
de compiler une grande variété de langages sources,
vers une grande variété de processeurs cibles. Par
conception GCC à été pensé de manière
à pouvoir etre le moins dépendant possible des language
sources, et des processeurs cible. Ainsi on verra que l'on pourra
adjoindre des élément de front-end prennant en compte
de nouveaux languages ou comme dans le cas du projet Simple-CPU de
nouveaux processeurs cibles (back-end). Entre ces deux parties se
trouvent l'ensemble de routines internes de GCC à savoir la
génération de code intermédiare, l'optimisation
de ces codes, et l'adaptation à la cible visée.
La partie front-end ne nous interresse absolument pas dans le cas
présent puisque, comme définit, le but est de pouvoir
compiler du code C sur le processeur Simple-CPU. L'on étudiera
par contre plus l'aspect back-end puisque c'est la solution retenue.
Comme on peut le voir sur le schéma la
génération de code cible s'appuie sur la description du processeur cible. Cette
description s'effectue grave à plusieur ficiers placés
dans le répertoire ./gcc/config/[machine]/.
Ces fichiers qui sont au nombre minimal de 4 sont les suivant:
- [machine].md : Le fichier principal de la description de machine. Il contient les patterns RTL (voir le paragraphe "Du RTL à l'assembleur") issus du code intermédiaire généré par GCC et le code ASM résultant.
- [machine].h : Le fichier [machine].h défini le nombres de registres, les instructions, le nombre de cycle utiles pour chacune, les modes de fonctionnement et tout les paramètres propres à la machine cible.
- [machine]_proto.h : Le fichier [machine]_proto.h défini les prototypes de fonctions que l'on trouve dans le fichier [machine].c
- [machine].c : Ces fichiers contiennent l'ensemble des fonctions et leurs prototypes. Ces fonctions servent dans la génération de code assembleur et dans la reconnaissance des patterns RTL.
Et éventuellement:
- t-[machine] : Compléments au makefile de gcc lors de l'utilisation de cette machine.
- [machine]-mods.def
- [machine].opt : Gère les options possible lors de la compilation. Une fois ces fichiers crées, il ne reste qu'à modifier le fichier de configuration général de GCC qui est nommé: config.gcc