diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-04-02 11:58:42 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-04-02 12:39:30 (GMT) |
commit | 1db4ef323b7a76093356ae76268132f3760e1631 (patch) | |
tree | fec36ee0ec1b6b2010b62ca4177edca0e31e2114 /tools/d2c/rules/manager.c | |
parent | 1bc80837dde03a32b5ab185067f7bd4c499a9850 (diff) |
Rewritten the whole instruction definition format.
Diffstat (limited to 'tools/d2c/rules/manager.c')
-rw-r--r-- | tools/d2c/rules/manager.c | 64 |
1 files changed, 25 insertions, 39 deletions
diff --git a/tools/d2c/rules/manager.c b/tools/d2c/rules/manager.c index 74be5fc..20f1a2b 100644 --- a/tools/d2c/rules/manager.c +++ b/tools/d2c/rules/manager.c @@ -290,9 +290,6 @@ static bool mark_cond_expr(const cond_expr *expr, const coding_bits *bits, const } - - printf("=== USE '%s' : %d\n", name, status); - if (!status) fprintf(stderr, "Error: nothing defined for the requested variable '%s'.\n", name); @@ -603,16 +600,14 @@ bool mark_decoding_rules(const decoding_rules *rules, const coding_bits *bits, c /****************************************************************************** * * -* Paramètres : rules = ensemble de règles à consulter. * -* top = indique si l'écriture se fait au plus haut niveau. * -* filter = filtre sur les règles à effectivement imprimer. * -* fd = descripteur d'un flux ouvert en écriture. * -* arch = architecture visée par l'opération. * -* subarch = sous-catégorie de cette même architecture. * -* bits = gestionnaire des bits d'encodage. * -* list = liste de l'ensemble des fonctions de conversion. * -* pp = pré-processeur pour les échanges de chaînes. * -* exit = exprime le besoin d'une voie de sortie. [OUT] * +* Paramètres : rules = ensemble de règles à consulter. * +* filter = filtre sur les règles à effectivement imprimer. * +* fd = descripteur d'un flux ouvert en écriture. * +* arch = architecture visée par l'opération. * +* bits = gestionnaire des bits d'encodage. * +* list = liste de l'ensemble des fonctions de conversion. * +* tab = décalage éventuel selon l'inclusion. * +* exit = exprime le besoin d'une voie de sortie. [OUT] * * * * Description : Traduit en code les éventuelles règles présentes. * * * @@ -622,7 +617,7 @@ bool mark_decoding_rules(const decoding_rules *rules, const coding_bits *bits, c * * ******************************************************************************/ -bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter, int fd, const char *arch, const char *subarch, const coding_bits *bits, const conv_list *list, const pre_processor *pp, bool *exit) +bool write_decoding_rules(decoding_rules *rules, CondActionType filter, int fd, const char *arch, const coding_bits *bits, const conv_list *list, const char *tab, bool *exit) { bool result; /* Bilan à remonter */ size_t i; /* Boucle de parcours */ @@ -642,6 +637,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter switch (rule->action.type) { case CAT_CALL: + case CAT_CHECKED_CALL: multi_lines = false; break; @@ -653,10 +649,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter if (rule->expr != NULL) { - if (!top) - dprintf(fd, "\t"); - - dprintf(fd, "\tif "); + dprintf(fd, "\t%sif ", tab); result = write_cond_expr(rule->expr, fd, bits, list); if (!result) break; @@ -664,13 +657,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter dprintf(fd, "\n"); if (multi_lines) - { - if (!top) - dprintf(fd, "\t"); - - dprintf(fd, "\t{\n"); - - } + dprintf(fd, "\t%s{\n", tab); } @@ -695,37 +682,42 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter case CAT_CALL: + /* callable = find_macro(pp, rule->action.callee); if (callable == NULL) + */ callable = rule->action.callee; if (rule->expr != NULL) - dprintf(fd, "\t"); + dprintf(fd, "\t") +; + dprintf(fd, "%s", tab); - result = call_instr_func(top, callable, rule->action.args, fd, bits, list, pp); + result = call_instr_func(callable, rule->action.args, fd, bits, list); break; case CAT_CHECKED_CALL: + /* callable = find_macro(pp, rule->action.callee); if (callable == NULL) + */ callable = rule->action.callee; if (rule->expr != NULL) dprintf(fd, "\t"); - result = checked_call_instr_func(top, callable, rule->action.args, fd, bits, list, pp); + dprintf(fd, "%s", tab); - if (rule->expr != NULL) - dprintf(fd, "\t"); + result = checked_call_instr_func(callable, rule->action.args, fd, bits, list); - if (!top) + if (rule->expr != NULL) dprintf(fd, "\t"); - dprintf(fd, "\t\tgoto quick_exit;\n"); + dprintf(fd, "\t\t%sgoto bad_exit;\n", tab); *exit = true; break; @@ -733,13 +725,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter } if (rule->expr != NULL && multi_lines) - { - if (!top) - dprintf(fd, "\t"); - - dprintf(fd, "\t}\n"); - - } + dprintf(fd, "\t%s}\n", tab); dprintf(fd, "\n"); |