Comment créer un compilateur C pour personnalisé CPU?
Quelle serait la façon la plus simple de créer un compilateur C pour une mesure de la CPU, en supposant bien sûr, j'ai déjà un assembleur pour elle?
Depuis un compilateur C génère de l'assemblée, est-il possible de définir simplement la norme de pièces et de morceaux de code assembleur pour les différents C idiomes, de reconstruire le compilateur, et ainsi obtenir un compilateur croisé pour le matériel cible?
De préférence, le compilateur lui-même serait écrit en C, et de le construire comme un fichier exécutable natif pour Linux ou Windows.
Veuillez noter: je suis pas demandant comment écrire le compilateur lui-même. Je ne prendrai que les cours à l'université, je sais à propos de général par le compilateur compilateurs, etc. Dans cette situation, je voudrais configurer un cadre existant (si possible). Je ne veux pas modifier la langue, je veux juste être en mesure de cibler un arbitraire de l'architecture. Si la réponse s'avère être "ça ne fonctionne pas de cette façon", que information sera utile à moi-même et personne d'autre qui pourrait faire des hypothèses similaires.
- Il n'y a pas d'exigence fondamentale que le compilateur produire de l'assembleur: c'est juste une commune de la pratique et de la pratique.
- imaginons qu'il est nécessaire dans ce cas. Je sais il y en a dans cette communauté qui aurait une solution. Veuillez noter que la réponse à ce que je demande n'est pas "aller prendre un compilateur cours d'écriture".
- PS: en Supposant que vous avez cette coutume CPU qui est tout nouveau, vous n'avez même pas un compilateur pour elle. Où est l'OS va venir??? Tu veux dire quoi par "fichier exécutable natif"? Natif de QUOI?!?
- Ce que vous me demandez, c'est "comment écrire mon propre backend pour GCC?" (remplacez "clang", etc. pour "GCC" le cas échéant). C'est encore non négligeable, et probablement le meilleur endroit pour commencer est avec la documentation pertinente (par exemple, llvm.org/releases/2.3/docs/WritingAnLLVMBackend.html). (Je vais très heureux d'admettre que je suis hors de ma profondeur à ce point!)
- oui, supposons qu'elle est nouvelle. supposons pas d'OS. 'fichier exécutable natif" a été utilisé pour signifier "une binaire qui s'exécute sur le processeur'
Vous devez vous connecter pour publier un commentaire.
Aperçu rapide/didacticiel sur l'écriture d'un LLVM backend.
Il y a la notion de cross-compilateur, c'est à dire., un qui fonctionne sur une architecture, mais les cibles en un autre. Vous pouvez voir comment GCC t-il (par exemple) et ajouter une nouvelle architecture de l'ensemble, si c'est le compilateur que vous souhaitez prolonger.
Edit: j'ai juste repéré une question il y a quelques années sur un GCC liste de diffusion sur la façon d'ajouter une nouvelle cible et quelqu'un a fait pour cette
La réponse courte est qu'il ne fonctionne pas de cette façon.
La plus longue réponse, c'est qu'il faut un certain effort pour écrire un compilateur pour un nouveau type de PROCESSEUR. Vous n'avez pas besoin de créer un compilateur à partir de zéro, cependant. La plupart des compilateurs sont structurés en plusieurs passes, en voici une architecture typique (beaucoup de variations sont possibles):
Dans cette description, seule l'étape 4 est dépendant de la machine. Ainsi, vous pouvez prendre un compilateur où l'étape 4 est clairement séparées et branchez votre propre étape 4. Cette opération nécessite une compréhension profonde de la CPU et de la compréhension du compilateur interne, mais vous n'avez pas besoin de s'inquiéter de ce qui se passe avant.
Presque tous les Processeurs qui ne sont pas très petit, très rares ou très vieux d'avoir un backend (étape 4) pour GCC. La principale source de documentation pour la rédaction d'un GCC backend est le GCC internes manuel, en particulier les chapitres sur machine descriptions et cible descriptions. GCC est un logiciel libre, donc il n'y a pas de coût de licence à l'utiliser.
1) réponse Courte:
"Pas de. Il n'y a pas une telle chose comme un "compilateur cadre" où vous pouvez simplement ajouter de l'eau (bouchon dans votre propre kit de montage), remuer, et c'est fait."
2) réponds Plus: c'est certainement possible. Mais difficile. Et probablement coûteux.
Si vous voulais le faire vous-même, j'aimerais commencer par regarder Gnu CC. Il est déjà disponible pour une grande variété de Processeurs et de plates-formes.
3) Prendre un coup d'oeil à ce lien pour plus d'idées (y compris l'idée de "construire une bibliothèque de fonctions et macros"), ce serait ma première suggestion:
http://www.instructables.com/answers/Custom-C-Compiler-for-homemade-instruction-set/
vbcc (à http://www.compilers.de) est une bonne et simple reciblage C-compilateur écrit en C. Il est beaucoup plus simple que GCC/LLVM. C'est tellement simple que j'ai été en mesure de réorienter le compilateur à mon propre CPU avec quelques semaines de travail sans avoir aucune connaissance préalable de compilateurs.
Vous pouvez modifier open source existante compilateurs comme GCC ou Clang. D'autres réponses ont fourni des liens à propos de pour en savoir plus. Mais ces compilateurs ne sont pas conçus pour facilement réorientées; ils sont "facile" de reciblage que les compilateurs que d'autres compilateurs filaire pour des objectifs spécifiques.
Mais si vous voulez un compilateur qui est relativement facile de reciblage, vous en voulez un en qui vous pouvez spécifier l'architecture de la machine en termes explicites, et certains outil génère le reste du compilateur (GCC n'est un peu de cela; je ne pense pas que Clang/LLVM fait beaucoup, mais je peux me tromper ici).
Il y a beaucoup de cela dans la littérature, google "compilateur de compilateur".
Mais pour une solution concrète pour C, vous devriez vérifier ACE, un fournisseur de compilateur qui génère des compilateurs sur demande pour les clients. Pas gratuit, mais j'entends qu'ils produisent de très bons compilateurs très rapidement. Je pense que c'produit standard de style binaires (ELFE?) donc, il ignore l'assembleur scène. (Je n'ai pas l'expérience ou de la relation avec ACE.)
Si vous ne se soucient pas de la qualité du code, vous pouvez probablement écrire une syntaxe-dirigé la traduction de C à assembler à l'aide d'un C AST. Vous pouvez obtenir C ASTs de GCC, Clang, peut-être ANTLR, et de notre Logiciel DMS de Réingénierie, Trousse à outils.