Portage de GCC pour Simple-CPU
Présentation du compilateur GCC

Par Wilfrid et Michel

Portage de GCC pour Simple CPU

Dans le cadre du portage de GCC sur Simple CPU plusieurs approches furent possibles. On comprend bien que la plus recommandé soit la création des fichiers de configuration spécifiques à l'architecture SC91-A. Ce paragraphe présente les possibilités envisagées lors de l'étude préliminaire.

Modification du code de GCC

La première approche considérée fut de modifier directement le code de GCC pour l'adapter directement à Simple CPU. Serait alors extrait les fonctions de génération de code à partir de fichier source en C vers une cible donnée. GCC serait alors utilisé comme "base" pour la création d'un nouveau compilateur qui au final n'aurait en commun avec GCC que quelques portions de code. On perd alors les propriétés de GCC, à savoir son abstraction des langages et des cibles. Cette approche à été écarté assez rapidement principalement grace au fait que GCC soit un programme extrèmement complexe dont la seule documentation repose sur l'analyse du code source. Dans ce cas coder un compilateur à partir de rien serait tout aussi éfficace, et ce n'est pas le but du projet.

Conversion de fichiers assembleurs

Une deuxième approche consiste à utiliser le code assembleur généré par GCC pour une cible donnée et supportée et ensuite convertir ce code assembleur vers le code assembleur de Simple CPU. Bien que parfaitement réalisable cette approche déplace le sujet du projet à la création d'un "traducteur". GCC n'étant plus vu que de loin et plus utilisé comme il le devrait. De plus cette approche nécessite de trouver un processeur cible supporté par GCC qui soit assez proche strucutrellement de l'architecture de Simple CPU.

Création des fichier des description pour Simple CPU

La partie back-end de GCC est basé sur des fichiers de description des cibles permettant d'utiliser les propriétés d'adaptabilités de GCC. Ecrire ces fichiers de description permet de se concentrer sur la cible et de laisser à l'étape de compilation de GCC le soin de créer un compliateur fonctionnel. La seule contrainte provient du fait qu'il faille correctement appréhender l'ensemble des concepts mis en jeu pour la création de ces fichiers (leurs architectures, les patterns RTL). Bien que non insurmontable ces difficultées peuvent etre "facilement" évitées par l'utilisation de fichiers de description déjà fourni avec les distributions de gcc. C'est ainsi que le projet de portage de GCC sur Simple CPU, bien qu'adoptant cette approche, utilisera une cible d'architecture proche pour adapter les fichiers de description.

C'est ainsi que le choix d'étudier plus en détails les fichiers de description pour le coeur FR30 de Fujitsu s'est fait. En effet de coeur possède des caractéristiques très proches de celle de Simple CPU (voir Comparaison FR30/SC91-A)

Choix d'une cible proche de l'architecture Simple CPU, le coeur FR30 de Fujitsu

Afin de partir d'une base solide pour la création des fichiers de description, c'est le coeur FR30 de Fujitsu qui a été préféré. Celui-ci a en effet été intégré aux distribution de GCC. De plus son architecture interne est très proche de celle de simple CPU.


FR30 Simple CPU
Architecture RISC 32 bits RISC 32 bits
Registres 16 x 32 bits 32 x 32 bits
Instructions 165 21

On remarquera que le nombre d'instruction différe entre les deux coeurs. Celà provient du fait de la méthode de comptage du nombre d'instruction. En effet sur Simple CPU on considère comme une instruction un unique mnémonique, or pour chacun de ces mnémonique le mode de fonctionnement est contenu dans les opérandes. Ainsi de 21 opérations "affichées" on passe facilement à plus d'une centaine d'instructions "réelles".

Le choix du processeur cible étant éffectué, l'on considère les fichiers fourni dans la distribution de GCC pour les adapter à Simple CPU. A savoir:

Adaptation du langage RTL
Simple-Cpu The Simple CPU project The Simple CPU project
Un projet de disk91
Small CPU project