Accueil > Bienvenue > Journal de bord > Quelques autres compilateurs

Quelques autres compilateurs

dimanche 29 janvier 2023, par Mathieu Brèthes

Toutes les versions de cet article : [Deutsch] [English] [français]

Dans mon article précédent j’ai jeté un oeil à SDCC comme possible candidat pour la création d’un compilateur C pour le TLCS900H, processeur de la Neo Geo Pocket, car celui-ci dispose déjà d’un backend pour le TLCS90, et j’avais vu sur la documentation Toshiba que le 900 disposait d’un jeu d’instructions compatible avec le premier.

Mais deux problèmes se posent :

  • En réalité les deux processeurs sont très différents, le 900 étant un processeur 16-bits disposant de registres 32-bits (!), avec une largeur de bus de 24 bits. Si les instructions se ressemblent, le code à générer va être très différent. Ceci est reflété par le fait que le backend du TLCS90 n’est côté SDCC qu’une variante du backend pour le Z80, un processeur 8-bit.
  • SDCC a un souci d’absence totale de documentation ou de tutoriels pour le développement d’un nouveau backend (en anglais, "retargeting the compiler"), ce qui me restreindrait à faire de l’ingénierie inversée pour comprendre comment le code est généré, et refaire pareil. Ceci est rendu complexe par le fait que le backend du TLCS90 n’est pas autonome mais est implémenté comme une variante du backend du Z80.

Sur les forums de SDCC certains auteurs indiquent qu’il serait plus adapté de créer un backend pour un autre compilateur pour ce type de processeur. Je suis allé voir ceux-ci :

  • GCC : le compilateur GNU. A l’avantage d’être très stable (le code évolue peu), mais il n’y a pas non plus de bonne documentation ou tutoriel pour écrire un backend. J’ai un peu étudié lex et yacc, deux outils associés, quand j’étais étudiant.
  • LLVM : un projet concurrent sous licence BSD. A l’avantage de proposer un tutoriel très poussé et à jour pour l’écriture d’un compilateur pour un processeur fictif appelée CPU0. Est par contre connu pour de changements réguliers d’organisation de son code source, qui nécessitent un gros travail de maintenance du code d’un éventuel backend.

Dans les deux cas il y a énormément de complexité. Mais il existe aussi d’autres compilateurs C, listés sur Wikipedia.

  • J’ai exploré un peu plus en profondeur le compilateur SmallC. Celui-ci date des années 1980, il a l’avantage d’une certaine simplicité, et surtout il est très bien documenté, y compris pour la partie backend. Mais il cible des petits processeurs type Z80.

Pour le moment je ne trouve pas de candidat idéal... Mais il y a encore d’autres compilateurs à explorer...