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:
- crti.asm
- crtn.asm
- fr30.c
- fr30.h
- fr30.md
- fr30-protos.h
- lib1funcs.asm
- t-fr30