diff options
Diffstat (limited to 'tools/d2c/coder.h')
-rw-r--r-- | tools/d2c/coder.h | 101 |
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 *); |