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.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/tools/d2c/spec.c b/tools/d2c/spec.c
index 1692fd8..0a47b72 100644
--- a/tools/d2c/spec.c
+++ b/tools/d2c/spec.c
@@ -342,10 +342,10 @@ bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *a
quick_exit = false;
- result &= write_decoding_rules(spec->rules, CAT_SEE,
+ result &= write_decoding_rules(spec->rules, false, CAT_SEE,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
- result &= write_decoding_rules(spec->rules, CAT_UNPREDICTABLE,
+ result &= write_decoding_rules(spec->rules, false, CAT_UNPREDICTABLE,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
/* Création de l'instruction en elle-même */
@@ -358,12 +358,12 @@ bool write_encoding_spec_disass(const encoding_spec *spec, int fd, const char *a
/* Inscriptions des éventuelles fonctions ou propriété à lier */
- result &= write_hook_functions(spec->hooks, fd);
+ result &= write_hook_functions(spec->hooks, false, fd);
- result &= write_decoding_rules(spec->rules, CAT_CHECKED_CALL,
+ result &= write_decoding_rules(spec->rules, false, CAT_CHECKED_CALL,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
- result &= write_decoding_rules(spec->rules, CAT_CALL,
+ result &= write_decoding_rules(spec->rules, false, CAT_CALL,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
/* Création des opérandes */
@@ -471,12 +471,14 @@ bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const
/* Inscriptions des éventuelles fonctions ou propriété à lier */
- result &= write_hook_functions(spec->hooks, fd);
+ result &= write_hook_functions(spec->hooks, true, fd);
- result &= write_decoding_rules(spec->rules, CAT_CHECKED_CALL,
+ quick_exit = false;
+
+ result &= write_decoding_rules(spec->rules, true, CAT_CHECKED_CALL,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
- result &= write_decoding_rules(spec->rules, CAT_CALL,
+ result &= write_decoding_rules(spec->rules, true, CAT_CALL,
fd, arch, subarch, spec->bits, spec->conversions, pp, &quick_exit);
/* Création des opérandes */
@@ -495,9 +497,14 @@ bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const
dprintf(fd, "\n");
- if (bad_exit)
+ if (quick_exit || bad_exit)
{
- dprintf(fd, " bad_exit:\n");
+ if (quick_exit)
+ dprintf(fd, " quick_exit:\n");
+
+ if (bad_exit)
+ dprintf(fd, " bad_exit:\n");
+
dprintf(fd, "\n");
dprintf(fd, "\tg_object_unref(G_OBJECT(result));\n");