From d52e16c97aa88ecf6a3643ef454e1aa857e0e7dd Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Thu, 17 May 2018 23:38:48 +0200 Subject: Fixed some generated instruction identifiers. --- tools/d2c/encoding.c | 7 ++++++- tools/d2c/syntax.c | 34 +++++++++++++++++----------------- tools/d2c/syntax.h | 2 +- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/tools/d2c/encoding.c b/tools/d2c/encoding.c index 9ed4663..fe8c98c 100644 --- a/tools/d2c/encoding.c +++ b/tools/d2c/encoding.c @@ -416,7 +416,12 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha free(suffix); for (i = 0; i < spec->syntax_count && result; i++) - result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, i, &bad_exit); + { + if (spec->syntax_count > 1) + result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, &i, &bad_exit); + else + result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, NULL, &bad_exit); + } free(sid); diff --git a/tools/d2c/syntax.c b/tools/d2c/syntax.c index dcac28e..606453a 100644 --- a/tools/d2c/syntax.c +++ b/tools/d2c/syntax.c @@ -251,16 +251,16 @@ bool declare_encoding_syntax(const encoding_syntax *syntax, int fd, const coding /****************************************************************************** * * -* Paramètres : syntax = gestionnaire d'un ensemble d'éléments de syntaxe. * -* fd = descripteur d'un flux ouvert en écriture. * -* arch = architecture visée par l'opération globale. * -* bits = gestionnaire des bits d'encodage. * -* alone = peut-on se placer en zone principale ? * -* pp = pré-processeur pour les échanges de chaînes. * -* id = identifiant unique attribué à l'instruction. * -* sid = base d'identifiant unique attribué à l'encodage. * -* index = indice de la syntaxe dans l'encodage. * -* exit = exprime le besoin d'une voie de sortie. [OUT] * +* Paramètres : syntax = gestionnaire d'un ensemble d'éléments de syntaxe. * +* fd = descripteur d'un flux ouvert en écriture. * +* arch = architecture visée par l'opération globale. * +* bits = gestionnaire des bits d'encodage. * +* openbar = peut-on se placer en zone principale ? * +* pp = pré-processeur pour les échanges de chaînes. * +* id = identifiant unique attribué à l'instruction. * +* sid = base d'identifiant unique attribué à l'encodage. * +* index = indice de la syntaxe ou NULL si syntaxe unique. * +* exit = exprime le besoin d'une voie de sortie. [OUT] * * * * Description : Amorce la construction des éléments d'une syntaxe. * * * @@ -270,7 +270,7 @@ bool declare_encoding_syntax(const encoding_syntax *syntax, int fd, const coding * * ******************************************************************************/ -bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *arch, const coding_bits *bits, bool alone, const char *id, const char *sid, size_t index, bool *exit) +bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *arch, const coding_bits *bits, bool openbar, const char *id, const char *sid, const size_t *index, bool *exit) { bool result; /* Bilan à retourner */ bool conditional; /* Définition sous condition ? */ @@ -279,7 +279,7 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar conditional = !is_disass_assert_empty(syntax->assertions); - assert((conditional && !alone) || (!conditional && alone)); + assert((conditional && !openbar) || (!conditional && openbar)); if (conditional) { @@ -296,9 +296,9 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar } else - tab = (alone ? "" : "\t"); + tab = (openbar ? "" : "\t"); - if (!alone) + if (!openbar) { imm_decl = false; @@ -309,16 +309,16 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar } - if (!alone) + if (!openbar) { dprintf(fd, "\t%sassert(result == NULL);\n", tab); dprintf(fd, "\n"); } - if (alone) + if (index == NULL) dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s);\n", tab, arch, id, sid); else - dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s_%zu);\n", tab, arch, id, sid, index); + dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s_%zu);\n", tab, arch, id, sid, *index); dprintf(fd, "\n"); diff --git a/tools/d2c/syntax.h b/tools/d2c/syntax.h index 645f0ce..c108aa5 100644 --- a/tools/d2c/syntax.h +++ b/tools/d2c/syntax.h @@ -67,7 +67,7 @@ bool mark_syntax_items(const encoding_syntax *, const coding_bits *); bool declare_encoding_syntax(const encoding_syntax *, int, const coding_bits *); /* Amorce la construction des éléments d'une syntaxe. */ -bool write_encoding_syntax(const encoding_syntax *, int, const char *, const coding_bits *, bool, const char *, const char *, size_t, bool *); +bool write_encoding_syntax(const encoding_syntax *, int, const char *, const coding_bits *, bool, const char *, const char *, const size_t *, bool *); -- cgit v0.11.2-87-g4458