summaryrefslogtreecommitdiff
path: root/tools/d2c/spec.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/spec.c')
-rw-r--r--tools/d2c/spec.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/tools/d2c/spec.c b/tools/d2c/spec.c
index 0a47b72..1d91fed 100644
--- a/tools/d2c/spec.c
+++ b/tools/d2c/spec.c
@@ -300,13 +300,15 @@ decoding_rules *get_rules_in_encoding_spec(const encoding_spec *spec)
bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *arch, const char *subarch, const char *ins, const char *details, unsigned int wide, const pre_processor *pp)
{
bool result; /* Bilan à retourner */
+ bool bad_exit; /* Ajout d'une sortie d'échec ?*/
char *keyword; /* Mot clef appelable en code */
bool quick_exit; /* Inclusion de sortie rapide ?*/
- bool bad_exit; /* Ajout d'une sortie d'échec ?*/
const char *new_ins; /* Nouvelle définition de nom */
result = true;
+ bad_exit = false;
+
keyword = make_callable(ins, false);
dprintf(fd, "\tGArchInstruction *%s_decode_%s%s_%s%u(uint%u_t _raw)\n",
@@ -320,8 +322,12 @@ bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *a
result &= mark_syntax_items(spec->syntax, spec->bits, spec->conversions);
+ result &= mark_decoding_rules(spec->rules, spec->bits, spec->conversions);
+
result &= declare_used_bits_fields(spec->bits, fd, wide);
+ result &= declare_used_intermediate_conversions(spec->conversions, fd, spec->bits, pp, wide);
+
result &= declare_syntax_items(spec->syntax, fd, spec->bits, spec->conversions, wide);
dprintf(fd, "\n");
@@ -336,7 +342,7 @@ bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *a
result &= define_used_bits_fields(spec->bits, fd);
- dprintf(fd, "\n");
+ result &= define_used_intermediate_conversions(spec->conversions, fd, arch, spec->bits, pp, &bad_exit);
/* Inclusion des éventuelles règles */
@@ -368,8 +374,6 @@ bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *a
/* Création des opérandes */
- bad_exit = false;
-
result &= define_syntax_items(spec->syntax, fd, arch, spec->bits, spec->conversions, pp, &bad_exit);
/* Conclusion de la procédure */