summaryrefslogtreecommitdiff
path: root/tools/d2c/coder.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/coder.h')
-rw-r--r--tools/d2c/coder.h101
1 files changed, 59 insertions, 42 deletions
diff --git a/tools/d2c/coder.h b/tools/d2c/coder.h
index 682dfe6..66ab66c 100644
--- a/tools/d2c/coder.h
+++ b/tools/d2c/coder.h
@@ -28,8 +28,10 @@
#include <stdbool.h>
+#include "encoding.h"
#include "pproc.h"
-#include "spec.h"
+#include "desc/manager.h"
+#include "id/manager.h"
@@ -41,18 +43,8 @@ typedef struct _rented_coder rented_coder;
/* -------------------------- CONSTRUCTION SELON COMMANDES -------------------------- */
-/* Type d'entrée/sortie attendues */
-typedef enum _InputOutputType
-{
- IOT_UNDEFINED, /* Type non défini */
- IOT_RAW, /* Lecture de contenu brut */
- IOT_FORMAT /* Définition d'opérandes */
-
-} InputOutputType;
-
-
/* Débute la définition d'une fonction de désassemblage. */
-rented_coder *create_coder(void);
+rented_coder *create_coder(pre_processor *);
/* Supprime le codeur de la mémoire. */
void delete_coder(rented_coder *);
@@ -67,10 +59,7 @@ const char *get_coder_input_file(const rented_coder *);
void set_coder_input_file(rented_coder *, const char *);
/* Spécifie le type de format à prendre en compte (E/S). */
-void set_coder_input_type(rented_coder *, InputOutputType);
-
-/* Spécifie le répertoire de base pour les sorties de code. */
-void set_coder_output_directory(rented_coder *, const char *);
+//void set_coder_input_type(rented_coder *, InputOutputType);
/* Détermine l'architecture visée par les traitements. */
void set_coder_arch(rented_coder *, const char *);
@@ -81,66 +70,94 @@ void set_coder_header_base(rented_coder *, const char *);
/* Définit le préfixe pour les opérandes chargées par format. */
void set_coder_const_prefix(rented_coder *, const char *);
-/* Fournit le pré-processeur du compilateur. */
-pre_processor *get_coder_pre_proc(const rented_coder *);
-/* Enregistre les contours d'une instruction d'assemblage. */
-void save_notes_for_coder(rented_coder *, char *, char *, char, const char *);
+/* ----------------------------- INFORMATIONS GENERALES ----------------------------- */
-/* --------------------------- REPRESENTATION D'ENCODAGES --------------------------- */
+/* Enregistre les contours d'une instruction d'assemblage. */
+void save_notes_for_coder(rented_coder *, char *, char *, char, const char *);
+/* Fournit la désignation nominale d'une instruction. */
+char *get_coder_nominal_name(const rented_coder *);
-/* Fournit un lien vers les spécifications courantes. */
-encoding_spec *get_current_encoding_spec(const rented_coder *);
+/* Fournit la désignation complète d'une instruction. */
+char *get_coder_code_name(const rented_coder *);
-/* Enregistre une définition supplémentaire. */
-void push_encoding_spec(rented_coder *, char *, unsigned int);
+/* Fournit le gestionnaire des définitions d'identifiant. */
+instr_id *get_coder_instruction_id(const rented_coder *);
+/* Fournit le gestionnaire de description d'identifiant. */
+instr_desc *get_coder_instruction_desc(const rented_coder *);
-/* --------------------------- GESTION DES CHAMPS DE BITS --------------------------- */
+/* --------------------------- REPRESENTATION D'ENCODAGES --------------------------- */
-/* Note la présence d'un champ remarquable dans une définition. */
-void register_named_field_in_coder(rented_coder *, char *, unsigned int);
-/* Note la présence d'un bit invariable dans une définition. */
-void register_bit_in_coder(rented_coder *, int);
+/* Fournit un lien vers les spécifications courantes. */
+encoding_spec *get_current_encoding_spec(const rented_coder *);
-/* Indique le nombre de bits traités. */
-//unsigned int count_coder_bits(const rented_coder *);
+/* Enregistre une définition supplémentaire. */
+void push_encoding_spec(rented_coder *, char *, unsigned int);
+/* Marque une instruction comme non utilisée. */
+void mark_coder_as_useless(rented_coder *coder);
-/* ---------------------------- SYNTAXE DES INSTRUCTIONS ---------------------------- */
+/* --------------------------- GENERATIONS DE CODE SOURCE --------------------------- */
-/* Enregistre la présence d'un nouvel opérande. */
-void register_syntax_item_in_coder(rented_coder *, char *, bool);
+/* Type d'entrée/sortie attendues */
+typedef enum _InputOutputType
+{
+ IOT_UNDEFINED, /* Type non défini */
+ IOT_RAW, /* Lecture de contenu brut */
+ IOT_FORMAT /* Définition d'opérandes */
+} InputOutputType;
-/* ---------------------------- CONVERSION DES ARGUMENTS ---------------------------- */
+/* Regroupement des informations utiles à la génération */
+typedef struct _output_info
+{
+ const char *directory; /* Répertoire de destination */
+ InputOutputType type; /* Type des définitions (E/S) */
+ const char *arch; /* Architecture à traiter */
+ const char *arch_cn; /* Nom de code de l'archi. */
+ const char *guard; /* Portion de macro globale */
+ const char *fmt_prefix; /* Préfixe pour les opérandes */
-/* Enregistre la function de conversion du brut à l'utile. */
-void register_conversion_in_coder(rented_coder *, conv_func *);
+ const char *id_prefix; /* Préfixe pour les constantes */
+ int id_len; /* Largeur des identifiants */
+} output_info;
-/* --------------------------- CONDITIONS ET CONSEQUENCES --------------------------- */
+/* Génère ou complète un fichier contenant le code C principal. */
+bool output_coder_body(const rented_coder *, const output_info *);
+/* Finalise le contenu utile du fichier des instructions. */
+bool fini_coder_opcodes_file(const char *, const output_info *);
+/* Génère ou complète un fichier constituant les identifiants. */
+bool output_coder_identifier(const rented_coder *, const output_info *);
+/* Finalise le contenu utile du fichier des identifiants. */
+bool fini_coder_identifiers_file(const char *, const output_info *);
+/* Génère ou complète un fichier constituant les mots clefs. */
+bool output_coder_keyword(const rented_coder *, const output_info *);
-/* --------------------------- GENERATIONS DE CODE SOURCE --------------------------- */
+/* Finalise le contenu utile du fichier des mots clefs. */
+bool fini_coder_keywords_file(const char *, const output_info *);
+/* Génère ou complète un fichier constituant les descriptions. */
+bool output_coder_description(const rented_coder *, const output_info *);
-/* Débute la définition des fonctions issues des spécifications. */
-bool dump_all_routines_using_coder(const rented_coder *);
+/* Finalise le contenu utile du fichier des descriptions. */
+bool fini_coder_descriptions_file(const char *, const output_info *);