diff options
Diffstat (limited to 'tools/d2c/spec.c')
-rw-r--r-- | tools/d2c/spec.c | 27 |
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"); |