From 6178efcee9fc18d11a773827dca8b95304e75731 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 14 May 2018 17:52:32 +0200
Subject: Used unique identifiers for instructions everywhere.

---
 plugins/arm/Makefile.am                |   2 +-
 plugins/arm/instruction.c              |  36 ---
 plugins/arm/v7/instruction.c           |  97 +++++++-
 plugins/arm/v7/instruction.h           |   5 +-
 plugins/arm/v7/opdefs/Makefile.am      |  16 +-
 plugins/arm/v7/opdefs/adc_A881.d       |   8 +
 plugins/arm/v7/opdefs/adc_A882.d       |  10 +
 plugins/arm/v7/opdefs/adc_A883.d       |   4 +
 plugins/arm/v7/opdefs/add_A8810.d      |   8 +
 plugins/arm/v7/opdefs/add_A8811.d      |   4 +
 plugins/arm/v7/opdefs/add_A884.d       |  10 +
 plugins/arm/v7/opdefs/add_A885.d       |   4 +
 plugins/arm/v7/opdefs/add_A886.d       |   8 +
 plugins/arm/v7/opdefs/add_A887.d       |   4 +
 plugins/arm/v7/opdefs/add_A888.d       |   4 +
 plugins/arm/v7/opdefs/add_A889.d       |  14 ++
 plugins/arm/v7/opdefs/adr_A8812.d      |  10 +
 plugins/arm/v7/opdefs/and_A8813.d      |   8 +
 plugins/arm/v7/opdefs/and_A8814.d      |  10 +
 plugins/arm/v7/opdefs/and_A8815.d      |   4 +
 plugins/arm/v7/opdefs/asr_A8816.d      |  10 +
 plugins/arm/v7/opdefs/asr_A8817.d      |  10 +
 plugins/arm/v7/opdefs/b_A8818.d        |  10 +
 plugins/arm/v7/opdefs/bfc_A8819.d      |   4 +
 plugins/arm/v7/opdefs/bfi_A8820.d      |   4 +
 plugins/arm/v7/opdefs/bic_A8821.d      |   8 +
 plugins/arm/v7/opdefs/bic_A8822.d      |  10 +
 plugins/arm/v7/opdefs/bic_A8823.d      |   4 +
 plugins/arm/v7/opdefs/bkpt_A8824.d     |   4 +
 plugins/arm/v7/opdefs/bl_A8825.d       |   8 +
 plugins/arm/v7/opdefs/blx_A8826.d      |   4 +
 plugins/arm/v7/opdefs/bx_A8827.d       |   4 +
 plugins/arm/v7/opdefs/bxj_A8828.d      |   4 +
 plugins/arm/v7/opdefs/cb_A8829.d       |   4 +
 plugins/arm/v7/opdefs/cdp_A8830.d      |  16 +-
 plugins/arm/v7/opdefs/clrex_A8832.d    |   4 +
 plugins/arm/v7/opdefs/clz_A8833.d      |   4 +
 plugins/arm/v7/opdefs/cmn_A8834.d      |   4 +
 plugins/arm/v7/opdefs/cmn_A8835.d      |   6 +
 plugins/arm/v7/opdefs/cmn_A8836.d      |   2 +
 plugins/arm/v7/opdefs/cmp_A8837.d      |   6 +
 plugins/arm/v7/opdefs/cmp_A8838.d      |   8 +
 plugins/arm/v7/opdefs/cmp_A8839.d      |   2 +
 plugins/arm/v7/opdefs/dbg_A8842.d      |   4 +
 plugins/arm/v7/opdefs/dmb_A8843.d      |   4 +
 plugins/arm/v7/opdefs/dsb_A8844.d      |   4 +
 plugins/arm/v7/opdefs/eor_A8846.d      |   8 +
 plugins/arm/v7/opdefs/eor_A8847.d      |  10 +
 plugins/arm/v7/opdefs/eor_A8848.d      |   4 +
 plugins/arm/v7/opdefs/ldr_A8862.d      |  12 +
 plugins/arm/v7/opdefs/ldr_A8863.d      |   6 +
 plugins/arm/v7/opdefs/ldr_A8864.d      |   6 +
 plugins/arm/v7/opdefs/ldr_A8865.d      |   4 +
 plugins/arm/v7/opdefs/ldr_A8866.d      |   6 +
 plugins/arm/v7/opdefs/ldrb_A8867.d     |  10 +
 plugins/arm/v7/opdefs/ldrb_A8868.d     |   6 +
 plugins/arm/v7/opdefs/ldrb_A8869.d     |   4 +
 plugins/arm/v7/opdefs/ldrb_A8870.d     |  10 +
 plugins/arm/v7/opdefs/ldrbt_A8871.d    |   6 +
 plugins/arm/v7/opdefs/ldrd_A8872.d     |  12 +
 plugins/arm/v7/opdefs/ldrd_A8873.d     |   4 +
 plugins/arm/v7/opdefs/ldrd_A8874.d     |   6 +
 plugins/arm/v7/opdefs/ldrex_A8875.d    |   4 +
 plugins/arm/v7/opdefs/ldrexb_A8876.d   |   4 +
 plugins/arm/v7/opdefs/ldrexd_A8877.d   |   4 +
 plugins/arm/v7/opdefs/ldrexh_A8878.d   |   4 +
 plugins/arm/v7/opdefs/ldrh_A8879.d     |  10 +
 plugins/arm/v7/opdefs/ldrh_A8880.d     |   6 +
 plugins/arm/v7/opdefs/ldrh_A8881.d     |   4 +
 plugins/arm/v7/opdefs/ldrh_A8882.d     |  10 +
 plugins/arm/v7/opdefs/ldrht_A8883.d    |   6 +
 plugins/arm/v7/opdefs/ldrsb_A8884.d    |  14 ++
 plugins/arm/v7/opdefs/ldrsb_A8885.d    |   4 +
 plugins/arm/v7/opdefs/ldrsb_A8886.d    |  10 +
 plugins/arm/v7/opdefs/ldrsbt_A8887.d   |   6 +
 plugins/arm/v7/opdefs/ldrsh_A8888.d    |  14 ++
 plugins/arm/v7/opdefs/ldrsh_A8889.d    |   4 +
 plugins/arm/v7/opdefs/ldrsh_A8890.d    |  10 +
 plugins/arm/v7/opdefs/ldrsht_A8891.d   |   6 +
 plugins/arm/v7/opdefs/ldrt_A8892.d     |   6 +
 plugins/arm/v7/opdefs/lsl_A8894.d      |  10 +
 plugins/arm/v7/opdefs/lsl_A8895.d      |  10 +
 plugins/arm/v7/opdefs/lsr_A8896.d      |  10 +
 plugins/arm/v7/opdefs/lsr_A8897.d      |  10 +
 plugins/arm/v7/opdefs/mcr_A8898.d      |  16 +-
 plugins/arm/v7/opdefs/mcrr_A8899.d     |  16 +-
 plugins/arm/v7/opdefs/mla_A88100.d     |   6 +
 plugins/arm/v7/opdefs/mls_A88101.d     |   4 +
 plugins/arm/v7/opdefs/mov_A88102.d     |  14 ++
 plugins/arm/v7/opdefs/mov_A88103.d     |   8 +
 plugins/arm/v7/opdefs/mov_A88104.d     |   4 +
 plugins/arm/v7/opdefs/movt_A88106.d    |   4 +
 plugins/arm/v7/opdefs/mrc_A88107.d     |  16 +-
 plugins/arm/v7/opdefs/mrrc_A88108.d    |  16 +-
 plugins/arm/v7/opdefs/mul_A88114.d     |   8 +
 plugins/arm/v7/opdefs/mvn_A88115.d     |   8 +
 plugins/arm/v7/opdefs/mvn_A88116.d     |  10 +
 plugins/arm/v7/opdefs/mvn_A88117.d     |   4 +
 plugins/arm/v7/opdefs/nop_A88119.d     |   6 +
 plugins/arm/v7/opdefs/orn_A88120.d     |   4 +
 plugins/arm/v7/opdefs/orn_A88121.d     |   4 +
 plugins/arm/v7/opdefs/orr_A88122.d     |   8 +
 plugins/arm/v7/opdefs/orr_A88123.d     |  10 +
 plugins/arm/v7/opdefs/orr_A88124.d     |   4 +
 plugins/arm/v7/opdefs/pkh_A88125.d     |   8 +
 plugins/arm/v7/opdefs/pld_A88126.d     |  12 +
 plugins/arm/v7/opdefs/pld_A88127.d     |   4 +
 plugins/arm/v7/opdefs/pld_A88128.d     |   8 +
 plugins/arm/v7/opdefs/pop_A88131.d     |   6 +
 plugins/arm/v7/opdefs/pop_A88132.d     |   4 +
 plugins/arm/v7/opdefs/push_A88133.d    |  10 +
 plugins/arm/v7/opdefs/qadd16_A88135.d  |   4 +
 plugins/arm/v7/opdefs/qadd8_A88136.d   |   4 +
 plugins/arm/v7/opdefs/qadd_A88134.d    |   4 +
 plugins/arm/v7/opdefs/qasx_A88137.d    |   4 +
 plugins/arm/v7/opdefs/qdadd_A88138.d   |   4 +
 plugins/arm/v7/opdefs/qdsub_A88139.d   |   4 +
 plugins/arm/v7/opdefs/qsax_A88140.d    |   4 +
 plugins/arm/v7/opdefs/qsub16_A88142.d  |   4 +
 plugins/arm/v7/opdefs/qsub8_A88143.d   |   4 +
 plugins/arm/v7/opdefs/qsub_A88141.d    |   4 +
 plugins/arm/v7/opdefs/rbit_A88144.d    |   4 +
 plugins/arm/v7/opdefs/rev16_A88146.d   |   6 +
 plugins/arm/v7/opdefs/rev_A88145.d     |   6 +
 plugins/arm/v7/opdefs/revsh_A88147.d   |   6 +
 plugins/arm/v7/opdefs/ror_A88149.d     |   8 +
 plugins/arm/v7/opdefs/ror_A88150.d     |  10 +
 plugins/arm/v7/opdefs/rrx_A88151.d     |   8 +
 plugins/arm/v7/opdefs/rsb_A88152.d     |  10 +
 plugins/arm/v7/opdefs/rsb_A88153.d     |   8 +
 plugins/arm/v7/opdefs/rsb_A88154.d     |   4 +
 plugins/arm/v7/opdefs/rsc_A88155.d     |   4 +
 plugins/arm/v7/opdefs/rsc_A88156.d     |   4 +
 plugins/arm/v7/opdefs/rsc_A88157.d     |   4 +
 plugins/arm/v7/opdefs/sadd16_A88158.d  |   4 +
 plugins/arm/v7/opdefs/sadd8_A88159.d   |   4 +
 plugins/arm/v7/opdefs/sasx_A88160.d    |   4 +
 plugins/arm/v7/opdefs/sbc_A88161.d     |   8 +
 plugins/arm/v7/opdefs/sbc_A88162.d     |  10 +
 plugins/arm/v7/opdefs/sbc_A88163.d     |   4 +
 plugins/arm/v7/opdefs/sbfx_A88164.d    |   4 +
 plugins/arm/v7/opdefs/sdiv_A88165.d    |   4 +
 plugins/arm/v7/opdefs/sel_A88166.d     |   4 +
 plugins/arm/v7/opdefs/setend_A88167.d  |   4 +
 plugins/arm/v7/opdefs/sev_A88168.d     |   6 +
 plugins/arm/v7/opdefs/shadd16_A88169.d |   4 +
 plugins/arm/v7/opdefs/shadd8_A88170.d  |   4 +
 plugins/arm/v7/opdefs/shasx_A88171.d   |   4 +
 plugins/arm/v7/opdefs/shsax_A88172.d   |   4 +
 plugins/arm/v7/opdefs/shsub16_A88173.d |   4 +
 plugins/arm/v7/opdefs/shsub8_A88174.d  |   4 +
 plugins/arm/v7/opdefs/smlad_A88177.d   |   8 +
 plugins/arm/v7/opdefs/smlal_A88178.d   |   6 +
 plugins/arm/v7/opdefs/smlald_A88180.d  |   8 +
 plugins/arm/v7/opdefs/smlsd_A88182.d   |   8 +
 plugins/arm/v7/opdefs/smlsld_A88183.d  |   8 +
 plugins/arm/v7/opdefs/smmla_A88184.d   |   8 +
 plugins/arm/v7/opdefs/smmls_A88185.d   |   8 +
 plugins/arm/v7/opdefs/smmul_A88186.d   |   8 +
 plugins/arm/v7/opdefs/smuad_A88187.d   |   8 +
 plugins/arm/v7/opdefs/smull_A88189.d   |   6 +
 plugins/arm/v7/opdefs/smusd_A88191.d   |   8 +
 plugins/arm/v7/opdefs/ssat16_A88194.d  |   4 +
 plugins/arm/v7/opdefs/ssat_A88193.d    |   4 +
 plugins/arm/v7/opdefs/ssax_A88195.d    |   4 +
 plugins/arm/v7/opdefs/ssub16_A88196.d  |   4 +
 plugins/arm/v7/opdefs/ssub8_A88197.d   |   4 +
 plugins/arm/v7/opdefs/str_A88203.d     |  12 +
 plugins/arm/v7/opdefs/str_A88204.d     |   6 +
 plugins/arm/v7/opdefs/str_A88205.d     |  10 +
 plugins/arm/v7/opdefs/strb_A88206.d    |  10 +
 plugins/arm/v7/opdefs/strb_A88207.d    |   6 +
 plugins/arm/v7/opdefs/strb_A88208.d    |  10 +
 plugins/arm/v7/opdefs/strbt_A88209.d   |   6 +
 plugins/arm/v7/opdefs/strd_A88210.d    |  12 +
 plugins/arm/v7/opdefs/strd_A88211.d    |   6 +
 plugins/arm/v7/opdefs/strex_A88212.d   |   4 +
 plugins/arm/v7/opdefs/strexb_A88213.d  |   4 +
 plugins/arm/v7/opdefs/strexd_A88214.d  |   4 +
 plugins/arm/v7/opdefs/strexh_A88215.d  |   4 +
 plugins/arm/v7/opdefs/strh_A88216.d    |  10 +
 plugins/arm/v7/opdefs/strh_A88217.d    |   6 +
 plugins/arm/v7/opdefs/strh_A88218.d    |  10 +
 plugins/arm/v7/opdefs/strht_A88219.d   |   6 +
 plugins/arm/v7/opdefs/strt_A88220.d    |   6 +
 plugins/arm/v7/opdefs/sub_A88221.d     |  10 +
 plugins/arm/v7/opdefs/sub_A88222.d     |   4 +
 plugins/arm/v7/opdefs/sub_A88223.d     |  10 +
 plugins/arm/v7/opdefs/sub_A88224.d     |   4 +
 plugins/arm/v7/opdefs/sub_A88225.d     |  12 +
 plugins/arm/v7/opdefs/sub_A88226.d     |   8 +
 plugins/arm/v7/opdefs/svc_A88228.d     |   4 +
 plugins/arm/v7/opdefs/swp_A88229.d     |   4 +
 plugins/arm/v7/opdefs/sxtab16_A88231.d |   4 +
 plugins/arm/v7/opdefs/sxtab_A88230.d   |   4 +
 plugins/arm/v7/opdefs/sxtah_A88232.d   |   4 +
 plugins/arm/v7/opdefs/sxtb16_A88234.d  |   4 +
 plugins/arm/v7/opdefs/sxtb_A88233.d    |   6 +
 plugins/arm/v7/opdefs/sxth_A88235.d    |   6 +
 plugins/arm/v7/opdefs/teq_A88237.d     |   4 +
 plugins/arm/v7/opdefs/teq_A88238.d     |   4 +
 plugins/arm/v7/opdefs/teq_A88239.d     |   2 +
 plugins/arm/v7/opdefs/tst_A88240.d     |   4 +
 plugins/arm/v7/opdefs/tst_A88241.d     |   6 +
 plugins/arm/v7/opdefs/tst_A88242.d     |   2 +
 plugins/arm/v7/opdefs/uadd16_A88243.d  |   4 +
 plugins/arm/v7/opdefs/uadd8_A88244.d   |   4 +
 plugins/arm/v7/opdefs/uasx_A88245.d    |   4 +
 plugins/arm/v7/opdefs/ubfx_A88246.d    |   4 +
 plugins/arm/v7/opdefs/udf_A88247.d     |   6 +
 plugins/arm/v7/opdefs/udiv_A88248.d    |   4 +
 plugins/arm/v7/opdefs/uhadd16_A88249.d |   4 +
 plugins/arm/v7/opdefs/uhadd8_A88250.d  |   4 +
 plugins/arm/v7/opdefs/uhasx_A88251.d   |   4 +
 plugins/arm/v7/opdefs/uhsax_A88252.d   |   4 +
 plugins/arm/v7/opdefs/uhsub16_A88253.d |   4 +
 plugins/arm/v7/opdefs/uhsub8_A88254.d  |   4 +
 plugins/arm/v7/opdefs/umaal_A88255.d   |   4 +
 plugins/arm/v7/opdefs/umlal_A88256.d   |   6 +
 plugins/arm/v7/opdefs/umull_A88257.d   |   6 +
 plugins/arm/v7/opdefs/uqadd16_A88258.d |   4 +
 plugins/arm/v7/opdefs/uqadd8_A88259.d  |   4 +
 plugins/arm/v7/opdefs/uqasx_A88260.d   |   4 +
 plugins/arm/v7/opdefs/uqsax_A88261.d   |   4 +
 plugins/arm/v7/opdefs/uqsub16_A88262.d |   4 +
 plugins/arm/v7/opdefs/uqsub8_A88263.d  |   4 +
 plugins/arm/v7/opdefs/usad8_A88264.d   |   4 +
 plugins/arm/v7/opdefs/usada8_A88265.d  |   4 +
 plugins/arm/v7/opdefs/usat16_A88267.d  |   4 +
 plugins/arm/v7/opdefs/usat_A88266.d    |   4 +
 plugins/arm/v7/opdefs/usax_A88268.d    |   4 +
 plugins/arm/v7/opdefs/usub16_A88269.d  |   4 +
 plugins/arm/v7/opdefs/usub8_A88270.d   |   4 +
 plugins/arm/v7/opdefs/uxtab16_A88272.d |   4 +
 plugins/arm/v7/opdefs/uxtab_A88271.d   |   4 +
 plugins/arm/v7/opdefs/uxtah_A88273.d   |   4 +
 plugins/arm/v7/opdefs/uxtb16_A88275.d  |   4 +
 plugins/arm/v7/opdefs/uxtb_A88274.d    |   6 +
 plugins/arm/v7/opdefs/uxth_A88276.d    |   6 +
 plugins/arm/v7/opdefs/wfe_A88424.d     |   6 +
 plugins/arm/v7/opdefs/wfi_A88425.d     |   6 +
 plugins/arm/v7/opdefs/yield_A88426.d   |   6 +
 plugins/dalvik/v35/instruction.c       |  49 +++-
 plugins/dalvik/v35/opdefs/Makefile.am  |  11 +-
 src/arch/instruction-int.h             |   4 +
 src/arch/instruction.c                 |  53 +----
 src/arch/instruction.h                 |   3 -
 tools/d2c/coder.c                      | 419 +++++++++++++++++++++++++++++++--
 tools/d2c/coder.h                      |  12 +
 tools/d2c/d2c.c                        |  18 +-
 tools/d2c/d2c.mk                       |  21 +-
 tools/d2c/encoding.c                   | 218 +++++++++++++++--
 tools/d2c/encoding.h                   |  14 +-
 tools/d2c/grammar.y                    |  50 ++--
 tools/d2c/hooks/manager.c              |  78 +++---
 tools/d2c/hooks/manager.h              |   6 +-
 tools/d2c/syntax.c                     |  33 ++-
 tools/d2c/syntax.h                     |   6 +-
 tools/d2c/tokens.l                     |   2 +
 259 files changed, 2373 insertions(+), 252 deletions(-)

diff --git a/plugins/arm/Makefile.am b/plugins/arm/Makefile.am
index 22ba102..877f7f4 100644
--- a/plugins/arm/Makefile.am
+++ b/plugins/arm/Makefile.am
@@ -37,4 +37,4 @@ AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) $(LIBX
 AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
 
 
-SUBDIRS = python v7
+SUBDIRS = v7 python
diff --git a/plugins/arm/instruction.c b/plugins/arm/instruction.c
index fc0a19f..9af8045 100644
--- a/plugins/arm/instruction.c
+++ b/plugins/arm/instruction.c
@@ -48,9 +48,6 @@ static void g_arm_instruction_dispose(GArmInstruction *);
 /* Procède à la libération totale de la mémoire. */
 static void g_arm_instruction_finalize(GArmInstruction *);
 
-/* Fournit le nom humain de l'instruction manipulée. */
-static const char *g_arm_instruction_get_keyword(GArmInstruction *, AsmSyntax);
-
 
 
 /* Indique le type défini pour une représentation d'une instruction ARM. */
@@ -72,16 +69,12 @@ G_DEFINE_TYPE(GArmInstruction, g_arm_instruction, G_TYPE_ARCH_INSTRUCTION);
 static void g_arm_instruction_class_init(GArmInstructionClass *klass)
 {
     GObjectClass *object_class;             /* Autre version de la classe  */
-    GArchInstructionClass *instr;           /* Encore une autre vision...  */
 
     object_class = G_OBJECT_CLASS(klass);
-    instr = G_ARCH_INSTRUCTION_CLASS(klass);
 
     object_class->dispose = (GObjectFinalizeFunc/* ! */)g_arm_instruction_dispose;
     object_class->finalize = (GObjectFinalizeFunc)g_arm_instruction_finalize;
 
-    instr->get_keyword = (get_instruction_keyword_fc)g_arm_instruction_get_keyword;
-
 }
 
 
@@ -178,35 +171,6 @@ bool g_arm_instruction_extend_keyword(GArmInstruction *instr, const char *suffix
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : instr  = instruction d'assemblage à consulter.               *
-*                syntax = type de représentation demandée.                    *
-*                                                                             *
-*  Description : Fournit le nom humain de l'instruction manipulée.            *
-*                                                                             *
-*  Retour      : Mot clef de bas niveau.                                      *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static const char *g_arm_instruction_get_keyword(GArmInstruction *instr, AsmSyntax syntax)
-{
-    if (instr->cached_keyword == NULL)
-    {
-        instr->cached_keyword = strdup(instr->keyword);
-
-        if (instr->suffix != NULL)
-            instr->cached_keyword = stradd(instr->cached_keyword, instr->suffix);
-
-    }
-
-    return instr->cached_keyword;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
 *  Paramètres  : instr = instruction ARM à mettre à jour.                     *
 *                cond  = condition d'exécution de l'instruction.              *
 *                                                                             *
diff --git a/plugins/arm/v7/instruction.c b/plugins/arm/v7/instruction.c
index 1c91b9a..d45979b 100644
--- a/plugins/arm/v7/instruction.c
+++ b/plugins/arm/v7/instruction.c
@@ -30,6 +30,11 @@
 #endif
 
 
+#include <common/extstr.h>
+
+
+#include "opcodes/hooks.h"
+#include "opcodes/keywords.h"
 #include "../instruction-int.h"
 
 
@@ -39,6 +44,7 @@ struct _GArmV7Instruction
 {
     GArmInstruction parent;                 /* Instance parente            */
 
+    ARMv7Syntax sid;                        /* Forme de syntaxe            */
     char encoding;                          /* Encodage de l'instruction   */
 
     bool setflags;                          /* Mise à jour des drapeaux    */
@@ -69,6 +75,12 @@ static void g_armv7_instruction_finalize(GArmV7Instruction *);
 /* Indique l'encodage d'une instruction de façon détaillée. */
 static const char *g_armv7_instruction_get_encoding(const GArmV7Instruction *);
 
+/* Fournit le nom humain de l'instruction manipulée. */
+static const char *g_armv7_instruction_get_keyword(const GArmV7Instruction *, AsmSyntax);
+
+/* Complète un désassemblage accompli pour une instruction. */
+static void g_armv7_instruction_call_hook(GArmV7Instruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
+
 /* Construit un petit résumé concis de l'instruction. */
 static char *g_armv7_instruction_build_tooltip(const GArmV7Instruction *);
 
@@ -102,6 +114,8 @@ static void g_armv7_instruction_class_init(GArmV7InstructionClass *klass)
     object_class->finalize = (GObjectFinalizeFunc)g_armv7_instruction_finalize;
 
     instr->get_encoding = (get_instruction_encoding_fc)g_armv7_instruction_get_encoding;
+    instr->get_keyword = (get_instruction_keyword_fc)g_armv7_instruction_get_keyword;
+    instr->call_hook = (call_instruction_hook_fc)g_armv7_instruction_call_hook;
     instr->build_tooltip = (build_instruction_tooltip_fc)g_armv7_instruction_build_tooltip;
 
 }
@@ -165,7 +179,8 @@ static void g_armv7_instruction_finalize(GArmV7Instruction *instr)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : keyword = définition du nom humaine de l'instruction.        *
+*  Paramètres  : uid = identifiant unique attribué à l'instruction.           *
+*                sid = identifiant unique attribué à sa forme de syntaxe.     *
 *                                                                             *
 *  Description : Crée une instruction pour l'architecture ARMv7.              *
 *                                                                             *
@@ -175,15 +190,17 @@ static void g_armv7_instruction_finalize(GArmV7Instruction *instr)
 *                                                                             *
 ******************************************************************************/
 
-GArchInstruction *g_armv7_instruction_new(const char *keyword)
+GArchInstruction *g_armv7_instruction_new(itid_t uid, ARMv7Syntax sid)
 {
-    GArchInstruction *result;               /* Structure à retourner       */
+    GArmV7Instruction *result;              /* Structure à retourner       */
 
     result = g_object_new(G_TYPE_ARMV7_INSTRUCTION, NULL);
 
-    G_ARM_INSTRUCTION(result)->keyword = keyword;
+    G_ARCH_INSTRUCTION(result)->uid = uid;
 
-    return result;
+    result->sid = sid;
+
+    return G_ARCH_INSTRUCTION(result);
 
 }
 
@@ -250,6 +267,76 @@ void g_armv7_instruction_set_encoding(GArmV7Instruction *instr, const char *enco
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : instr  = instruction d'assemblage à consulter.               *
+*                syntax = type de représentation demandée.                    *
+*                                                                             *
+*  Description : Fournit le nom humain de l'instruction manipulée.            *
+*                                                                             *
+*  Retour      : Mot clef de bas niveau.                                      *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static const char *g_armv7_instruction_get_keyword(const GArmV7Instruction *instr, AsmSyntax syntax)
+{
+    const char *result;                     /* Désignation à retourner     */
+    GArmInstruction *parent;                /* Autre forme de l'instance   */
+
+    parent = G_ARM_INSTRUCTION(instr);
+
+    if (parent->cached_keyword == NULL)
+    {
+        assert(instr->sid < AOP7_ENC_COUNT);
+
+        parent->cached_keyword = strdup(_armv7_keywords[instr->sid]);
+
+        if (parent->suffix != NULL)
+            parent->cached_keyword = stradd(parent->cached_keyword, parent->suffix);
+
+    }
+
+    result = parent->cached_keyword;
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : instr   = instruction quelconque à traiter.                  *
+*                type    = type de procédure à utiliser.                      *
+*                proc    = représentation de l'architecture utilisée.         *
+*                context = contexte associé à la phase de désassemblage.      *
+*                format  = accès aux données du binaire d'origine.            *
+*                                                                             *
+*  Description : Complète un désassemblage accompli pour une instruction.     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_armv7_instruction_call_hook(GArmV7Instruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GExeFormat *format)
+{
+    instr_hook_fc hook;                     /* Décrochage à appeler        */
+
+    assert(type < IPH_COUNT);
+
+    assert(instr->sid < AOP7_ENC_COUNT);
+
+    hook = _armv7_hooks[instr->sid][type];
+
+    if (hook != NULL)
+        hook(G_ARCH_INSTRUCTION(instr), proc, context, format);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : instr = instruction Dalvik à consulter.                      *
 *                                                                             *
 *  Description : Construit un petit résumé concis de l'instruction.           *
diff --git a/plugins/arm/v7/instruction.h b/plugins/arm/v7/instruction.h
index 6f11d21..c75b71d 100644
--- a/plugins/arm/v7/instruction.h
+++ b/plugins/arm/v7/instruction.h
@@ -33,6 +33,9 @@
 #include <arch/instruction.h>
 
 
+#include "opcodes/subidentifiers.h"
+
+
 
 #define G_TYPE_ARMV7_INSTRUCTION               g_armv7_instruction_get_type()
 #define G_ARMV7_INSTRUCTION(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_armv7_instruction_get_type(), GArmV7Instruction))
@@ -53,7 +56,7 @@ typedef struct _GArmV7InstructionClass GArmV7InstructionClass;
 GType g_armv7_instruction_get_type(void);
 
 /* Crée une instruction pour l'architecture ARMv7. */
-GArchInstruction *g_armv7_instruction_new(const char *);
+GArchInstruction *g_armv7_instruction_new(itid_t, ARMv7Syntax);
 
 /* Précise l'encodage d'une instruction ARMv7 dans le détail. */
 void g_armv7_instruction_set_encoding(GArmV7Instruction *, const char *);
diff --git a/plugins/arm/v7/opdefs/Makefile.am b/plugins/arm/v7/opdefs/Makefile.am
index 40ab737..0ecabc4 100644
--- a/plugins/arm/v7/opdefs/Makefile.am
+++ b/plugins/arm/v7/opdefs/Makefile.am
@@ -28,22 +28,26 @@ D2C_SPECIFIC =
 FIXED_C_INCLUDES =						\
 	\#include <assert.h>				\
 	\n									\
-	\n\#include <arch/link.h>			\
 	\n\#include <common/bconst.h>		\
 	\n									\
+	\n\#include "identifiers.h"			\
 	\n\#include "../helpers.h"			\
 	\n\#include "../instruction.h"		\
-	\n\#include "../fetch.h"			\
-	\n\#include "../link.h"				\
-	\n\#include "../post.h"				\
-	\n\#include "../../instruction.h"	\
-	\n\#include "../../link.h"
+	\n\#include "../../instruction.h"
 
 FIXED_H_INCLUDES =						\
 	\#include <stdint.h>				\
     \n									\
     \n\#include <arch/instruction.h>
 
+FIXED_H_HOOKS_INCLUDES =				\
+	\#include <arch/link.h>				\
+	\n									\
+	\n\#include "../fetch.h"			\
+	\n\#include "../link.h"				\
+	\n\#include "../post.h"				\
+	\n\#include "../../link.h"
+
 
 # for i in $(seq 1 426); do test -f *A88$i.d && (ls *A88$i.d | sed 's/^/\t/' | sed 's/$/\t\t\t\t\t\t\\/') ; done
 ARMV7_DEFS = 							\
diff --git a/plugins/arm/v7/opdefs/adc_A881.d b/plugins/arm/v7/opdefs/adc_A881.d
index 9368a3c..d470638 100644
--- a/plugins/arm/v7/opdefs/adc_A881.d
+++ b/plugins/arm/v7/opdefs/adc_A881.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 0
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 1
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 2
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 3
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/adc_A882.d b/plugins/arm/v7/opdefs/adc_A882.d
index 249803a..aaca002 100644
--- a/plugins/arm/v7/opdefs/adc_A882.d
+++ b/plugins/arm/v7/opdefs/adc_A882.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 4
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 5
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 6
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 7
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 8
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/adc_A883.d b/plugins/arm/v7/opdefs/adc_A883.d
index d1012e2..0270402 100644
--- a/plugins/arm/v7/opdefs/adc_A883.d
+++ b/plugins/arm/v7/opdefs/adc_A883.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 9
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 10
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A8810.d b/plugins/arm/v7/opdefs/add_A8810.d
index 82d4907..357dadc 100644
--- a/plugins/arm/v7/opdefs/add_A8810.d
+++ b/plugins/arm/v7/opdefs/add_A8810.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 33
+
 		@conv {
 
 			reg_D = Register(DM:Rdm)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 34
+
 		@conv {
 
 			reg_D = Register(13)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 35
+
 		@assert {
 
 			S == 0
@@ -98,6 +104,8 @@
 
 	@syntax {
 
+		@subid 36
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A8811.d b/plugins/arm/v7/opdefs/add_A8811.d
index 8b8cb60..f5c19aa 100644
--- a/plugins/arm/v7/opdefs/add_A8811.d
+++ b/plugins/arm/v7/opdefs/add_A8811.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 37
+
 		@assert {
 
 			S == 0
@@ -64,6 +66,8 @@
 
 	@syntax {
 
+		@subid 38
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A884.d b/plugins/arm/v7/opdefs/add_A884.d
index aafd1ef..c35685f 100644
--- a/plugins/arm/v7/opdefs/add_A884.d
+++ b/plugins/arm/v7/opdefs/add_A884.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 11
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 12
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 13
+
 		@assert {
 
 			S == 0
@@ -97,6 +103,8 @@
 
 	@syntax {
 
+		@subid 14
+
 		@assert {
 
 			S == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 15
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/add_A885.d b/plugins/arm/v7/opdefs/add_A885.d
index 6416868..87b92a6 100644
--- a/plugins/arm/v7/opdefs/add_A885.d
+++ b/plugins/arm/v7/opdefs/add_A885.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 16
+
 		@assert {
 
 			S == 0
@@ -63,6 +65,8 @@
 
 	@syntax {
 
+		@subid 17
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A886.d b/plugins/arm/v7/opdefs/add_A886.d
index bd5fde9..856272e 100644
--- a/plugins/arm/v7/opdefs/add_A886.d
+++ b/plugins/arm/v7/opdefs/add_A886.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 18
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 19
+
 		@conv {
 
 			reg_D = Register(DN:Rdn)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 20
+
 		@assert {
 
 			S == 0
@@ -98,6 +104,8 @@
 
 	@syntax {
 
+		@subid 21
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A887.d b/plugins/arm/v7/opdefs/add_A887.d
index 5528631..6105f18 100644
--- a/plugins/arm/v7/opdefs/add_A887.d
+++ b/plugins/arm/v7/opdefs/add_A887.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 22
+
 		@assert {
 
 			S == 0
@@ -64,6 +66,8 @@
 
 	@syntax {
 
+		@subid 23
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A888.d b/plugins/arm/v7/opdefs/add_A888.d
index 1566ed3..8fd6078 100644
--- a/plugins/arm/v7/opdefs/add_A888.d
+++ b/plugins/arm/v7/opdefs/add_A888.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 24
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 25
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/add_A889.d b/plugins/arm/v7/opdefs/add_A889.d
index ecba21c..834de50 100644
--- a/plugins/arm/v7/opdefs/add_A889.d
+++ b/plugins/arm/v7/opdefs/add_A889.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 26
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 27
+
 		@conv {
 
 			reg_D = Register(13)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 28
+
 		@assert {
 
 			S == 0
@@ -97,6 +103,8 @@
 
 	@syntax {
 
+		@subid 29
+
 		@assert {
 
 			S == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 30
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -143,6 +153,8 @@
 
 	@syntax {
 
+		@subid 31
+
 		@assert {
 
 			S == 0
@@ -169,6 +181,8 @@
 
 	@syntax {
 
+		@subid 32
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/adr_A8812.d b/plugins/arm/v7/opdefs/adr_A8812.d
index 6417d8f..1f77eea 100644
--- a/plugins/arm/v7/opdefs/adr_A8812.d
+++ b/plugins/arm/v7/opdefs/adr_A8812.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 39
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 40
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 41
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -94,6 +100,8 @@
 
 	@syntax {
 
+		@subid 42
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -119,6 +127,8 @@
 
 	@syntax {
 
+		@subid 43
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/and_A8813.d b/plugins/arm/v7/opdefs/and_A8813.d
index fcec067..988bdd7 100644
--- a/plugins/arm/v7/opdefs/and_A8813.d
+++ b/plugins/arm/v7/opdefs/and_A8813.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 44
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 45
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 46
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 47
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/and_A8814.d b/plugins/arm/v7/opdefs/and_A8814.d
index 18fe4e2..1a807f9 100644
--- a/plugins/arm/v7/opdefs/and_A8814.d
+++ b/plugins/arm/v7/opdefs/and_A8814.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 48
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 49
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 50
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 51
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 52
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/and_A8815.d b/plugins/arm/v7/opdefs/and_A8815.d
index f53607e..3d890cb 100644
--- a/plugins/arm/v7/opdefs/and_A8815.d
+++ b/plugins/arm/v7/opdefs/and_A8815.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 53
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 54
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/asr_A8816.d b/plugins/arm/v7/opdefs/asr_A8816.d
index 71be77f..401c4c5 100644
--- a/plugins/arm/v7/opdefs/asr_A8816.d
+++ b/plugins/arm/v7/opdefs/asr_A8816.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 55
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 56
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 57
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 58
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 59
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/asr_A8817.d b/plugins/arm/v7/opdefs/asr_A8817.d
index bb33386..0ddeae9 100644
--- a/plugins/arm/v7/opdefs/asr_A8817.d
+++ b/plugins/arm/v7/opdefs/asr_A8817.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 60
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 61
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 62
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 63
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 64
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/b_A8818.d b/plugins/arm/v7/opdefs/b_A8818.d
index db5e763..d10b297 100644
--- a/plugins/arm/v7/opdefs/b_A8818.d
+++ b/plugins/arm/v7/opdefs/b_A8818.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 65
+
 		@conv {
 
 			imm32 = SignExtend(imm8:'0', 32, 8)
@@ -69,6 +71,8 @@
 
 	@syntax {
 
+		@subid 66
+
 		@conv {
 
 			imm32 = SignExtend(imm11:'0', 32, 11)
@@ -95,6 +99,8 @@
 
 	@syntax {
 
+		@subid 67
+
 		@conv {
 
 			imm32 = SignExtend(S:J2:J1:imm6:imm11:'0', 32, 20)
@@ -128,6 +134,8 @@
 
 	@syntax {
 
+		@subid 68
+
 		@conv {
 
 			imm32 = SignExtend(S:J2:J1:imm10:imm11:'0', 32, 24)
@@ -154,6 +162,8 @@
 
 	@syntax {
 
+		@subid 69
+
 		@conv {
 
 			imm32 = SignExtend(imm24:'00', 32, 25)
diff --git a/plugins/arm/v7/opdefs/bfc_A8819.d b/plugins/arm/v7/opdefs/bfc_A8819.d
index f3bba3c..f8875e5 100644
--- a/plugins/arm/v7/opdefs/bfc_A8819.d
+++ b/plugins/arm/v7/opdefs/bfc_A8819.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 70
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 71
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/bfi_A8820.d b/plugins/arm/v7/opdefs/bfi_A8820.d
index 096189d..aa71aa8 100644
--- a/plugins/arm/v7/opdefs/bfi_A8820.d
+++ b/plugins/arm/v7/opdefs/bfi_A8820.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 72
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -59,6 +61,8 @@
 
 	@syntax {
 
+		@subid 73
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/bic_A8821.d b/plugins/arm/v7/opdefs/bic_A8821.d
index b2e9896..59d4bb0 100644
--- a/plugins/arm/v7/opdefs/bic_A8821.d
+++ b/plugins/arm/v7/opdefs/bic_A8821.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 74
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 75
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 76
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 77
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/bic_A8822.d b/plugins/arm/v7/opdefs/bic_A8822.d
index eef59ae..f4746b9 100644
--- a/plugins/arm/v7/opdefs/bic_A8822.d
+++ b/plugins/arm/v7/opdefs/bic_A8822.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 78
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 79
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 80
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 81
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 82
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/bic_A8823.d b/plugins/arm/v7/opdefs/bic_A8823.d
index 94b3904..fb57338 100644
--- a/plugins/arm/v7/opdefs/bic_A8823.d
+++ b/plugins/arm/v7/opdefs/bic_A8823.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 83
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 84
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/bkpt_A8824.d b/plugins/arm/v7/opdefs/bkpt_A8824.d
index e7c9c57..e9c9f4b 100644
--- a/plugins/arm/v7/opdefs/bkpt_A8824.d
+++ b/plugins/arm/v7/opdefs/bkpt_A8824.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 85
+
 		@conv {
 
 			imm32 = ZeroExtend(imm8, 32)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 86
+
 		@conv {
 
 			imm32 = ZeroExtend(imm12:imm4, 32)
diff --git a/plugins/arm/v7/opdefs/bl_A8825.d b/plugins/arm/v7/opdefs/bl_A8825.d
index 52f0138..221bbc5 100644
--- a/plugins/arm/v7/opdefs/bl_A8825.d
+++ b/plugins/arm/v7/opdefs/bl_A8825.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 87
+
 		@conv {
 
 			imm32 = SignExtend(S:J2:J1:imm10:imm11:'0', 32, 24)
@@ -63,6 +65,8 @@
 
 	@syntax {
 
+		@subid 88
+
 		@conv {
 
 			imm32 = SignExtend(S:J1:J2:imm10H:imm10L:'00', 32, 24)
@@ -89,6 +93,8 @@
 
 	@syntax {
 
+		@subid 89
+
 		@conv {
 
 			imm32 = SignExtend(imm24:'00', 32, 25)
@@ -121,6 +127,8 @@
 
 	@syntax {
 
+		@subid 90
+
 		@conv {
 
 			imm32 = SignExtend(imm24:H:'0', 32, 25)
diff --git a/plugins/arm/v7/opdefs/blx_A8826.d b/plugins/arm/v7/opdefs/blx_A8826.d
index cfc965f..2c975d3 100644
--- a/plugins/arm/v7/opdefs/blx_A8826.d
+++ b/plugins/arm/v7/opdefs/blx_A8826.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 91
+
 		@conv {
 
 			reg_M = Register(Rm)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 92
+
 		@conv {
 
 			reg_M = Register(Rm)
diff --git a/plugins/arm/v7/opdefs/bx_A8827.d b/plugins/arm/v7/opdefs/bx_A8827.d
index 328cae1..64ad628 100644
--- a/plugins/arm/v7/opdefs/bx_A8827.d
+++ b/plugins/arm/v7/opdefs/bx_A8827.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 93
+
 		@conv {
 
 			reg_M = Register(Rm)
@@ -61,6 +63,8 @@
 
 	@syntax {
 
+		@subid 94
+
 		@conv {
 
 			reg_M = Register(Rm)
diff --git a/plugins/arm/v7/opdefs/bxj_A8828.d b/plugins/arm/v7/opdefs/bxj_A8828.d
index 9ebde4f..7c6ddb5 100644
--- a/plugins/arm/v7/opdefs/bxj_A8828.d
+++ b/plugins/arm/v7/opdefs/bxj_A8828.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 95
+
 		@conv {
 
 			reg_M = Register(Rm)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 96
+
 		@conv {
 
 			reg_M = Register(Rm)
diff --git a/plugins/arm/v7/opdefs/cb_A8829.d b/plugins/arm/v7/opdefs/cb_A8829.d
index 78f3a43..5e004b7 100644
--- a/plugins/arm/v7/opdefs/cb_A8829.d
+++ b/plugins/arm/v7/opdefs/cb_A8829.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 97
+
 		@assert {
 
 			op == 0
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 98
+
 		@assert {
 
 			op == 1
diff --git a/plugins/arm/v7/opdefs/cdp_A8830.d b/plugins/arm/v7/opdefs/cdp_A8830.d
index 723e231..32fc2f1 100644
--- a/plugins/arm/v7/opdefs/cdp_A8830.d
+++ b/plugins/arm/v7/opdefs/cdp_A8830.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 99
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -54,12 +56,14 @@
 
 }
 
-@encoding (A1) {
+@encoding (T2) {
 
-	@word 1 1 1 0 1 1 1 0 opc1(4) CRn(4) CRd(4) coproc(4) opc2(3) 0 CRm(4)
+	@word 1 1 1 1 1 1 1 0 opc1(4) CRn(4) CRd(4) coproc(4) opc2(3) 0 CRm(4)
 
 	@syntax {
 
+		@subid 100
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -77,12 +81,14 @@
 
 }
 
-@encoding (T2) {
+@encoding (A1) {
 
-	@word 1 1 1 1 1 1 1 0 opc1(4) CRn(4) CRd(4) coproc(4) opc2(3) 0 CRm(4)
+	@word 1 1 1 0 1 1 1 0 opc1(4) CRn(4) CRd(4) coproc(4) opc2(3) 0 CRm(4)
 
 	@syntax {
 
+		@subid 101
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 102
+
 		@conv {
 
 			cp = CoProcessor(coproc)
diff --git a/plugins/arm/v7/opdefs/clrex_A8832.d b/plugins/arm/v7/opdefs/clrex_A8832.d
index c191784..5edfb58 100644
--- a/plugins/arm/v7/opdefs/clrex_A8832.d
+++ b/plugins/arm/v7/opdefs/clrex_A8832.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 103
+
 		@asm clrex
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 104
+
 		@asm clrex
 
 	}
diff --git a/plugins/arm/v7/opdefs/clz_A8833.d b/plugins/arm/v7/opdefs/clz_A8833.d
index cdeded7..7cbb51c 100644
--- a/plugins/arm/v7/opdefs/clz_A8833.d
+++ b/plugins/arm/v7/opdefs/clz_A8833.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 105
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 106
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/cmn_A8834.d b/plugins/arm/v7/opdefs/cmn_A8834.d
index 38c8b04..45462c7 100644
--- a/plugins/arm/v7/opdefs/cmn_A8834.d
+++ b/plugins/arm/v7/opdefs/cmn_A8834.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 107
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 108
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/cmn_A8835.d b/plugins/arm/v7/opdefs/cmn_A8835.d
index 5ce4bd0..55c281c 100644
--- a/plugins/arm/v7/opdefs/cmn_A8835.d
+++ b/plugins/arm/v7/opdefs/cmn_A8835.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 109
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 110
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -76,6 +80,8 @@
 
 	@syntax {
 
+		@subid 111
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/cmn_A8836.d b/plugins/arm/v7/opdefs/cmn_A8836.d
index a6c3dcb..e1052a8 100644
--- a/plugins/arm/v7/opdefs/cmn_A8836.d
+++ b/plugins/arm/v7/opdefs/cmn_A8836.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 112
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/cmp_A8837.d b/plugins/arm/v7/opdefs/cmp_A8837.d
index 8df8db9..261467b 100644
--- a/plugins/arm/v7/opdefs/cmp_A8837.d
+++ b/plugins/arm/v7/opdefs/cmp_A8837.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 113
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 114
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 115
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/cmp_A8838.d b/plugins/arm/v7/opdefs/cmp_A8838.d
index eb2f698..401e4ac 100644
--- a/plugins/arm/v7/opdefs/cmp_A8838.d
+++ b/plugins/arm/v7/opdefs/cmp_A8838.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 116
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 117
+
 		@conv {
 
 			reg_N = Register(N:Rn)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 118
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -95,6 +101,8 @@
 
 	@syntax {
 
+		@subid 119
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/cmp_A8839.d b/plugins/arm/v7/opdefs/cmp_A8839.d
index 1b29f30..6bdafb3 100644
--- a/plugins/arm/v7/opdefs/cmp_A8839.d
+++ b/plugins/arm/v7/opdefs/cmp_A8839.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 120
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/dbg_A8842.d b/plugins/arm/v7/opdefs/dbg_A8842.d
index 7cc73d1..d053ca3 100644
--- a/plugins/arm/v7/opdefs/dbg_A8842.d
+++ b/plugins/arm/v7/opdefs/dbg_A8842.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 121
+
 		@conv {
 
 			direct_option = UInt(option)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 122
+
 		@conv {
 
 			direct_option = UInt(option)
diff --git a/plugins/arm/v7/opdefs/dmb_A8843.d b/plugins/arm/v7/opdefs/dmb_A8843.d
index 14e69e2..b8d9717 100644
--- a/plugins/arm/v7/opdefs/dmb_A8843.d
+++ b/plugins/arm/v7/opdefs/dmb_A8843.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 123
+
 		@conv {
 
 			direct_option = UInt(option)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 124
+
 		@conv {
 
 			direct_option = UInt(option)
diff --git a/plugins/arm/v7/opdefs/dsb_A8844.d b/plugins/arm/v7/opdefs/dsb_A8844.d
index 2e4faf2..e8ede64 100644
--- a/plugins/arm/v7/opdefs/dsb_A8844.d
+++ b/plugins/arm/v7/opdefs/dsb_A8844.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 125
+
 		@conv {
 
 			direct_option = UInt(option)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 126
+
 		@conv {
 
 			direct_option = UInt(option)
diff --git a/plugins/arm/v7/opdefs/eor_A8846.d b/plugins/arm/v7/opdefs/eor_A8846.d
index 705d5b3..dfafa9b 100644
--- a/plugins/arm/v7/opdefs/eor_A8846.d
+++ b/plugins/arm/v7/opdefs/eor_A8846.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 127
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 128
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 129
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 130
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/eor_A8847.d b/plugins/arm/v7/opdefs/eor_A8847.d
index a4a8c13..f6e3387 100644
--- a/plugins/arm/v7/opdefs/eor_A8847.d
+++ b/plugins/arm/v7/opdefs/eor_A8847.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 131
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 132
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 133
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 134
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 135
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/eor_A8848.d b/plugins/arm/v7/opdefs/eor_A8848.d
index 0bd2f3e..94f0e92 100644
--- a/plugins/arm/v7/opdefs/eor_A8848.d
+++ b/plugins/arm/v7/opdefs/eor_A8848.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 136
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 137
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/ldr_A8862.d b/plugins/arm/v7/opdefs/ldr_A8862.d
index a9e8348..8f61aa3 100644
--- a/plugins/arm/v7/opdefs/ldr_A8862.d
+++ b/plugins/arm/v7/opdefs/ldr_A8862.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 138
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 139
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 140
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -100,6 +106,8 @@
 
 	@syntax {
 
+		@subid 141
+
 		@assert {
 
 			P == 1
@@ -122,6 +130,8 @@
 
 	@syntax {
 
+		@subid 142
+
 		@assert {
 
 			P == 1
@@ -144,6 +154,8 @@
 
 	@syntax {
 
+		@subid 143
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldr_A8863.d b/plugins/arm/v7/opdefs/ldr_A8863.d
index efb4523..c3b423f 100644
--- a/plugins/arm/v7/opdefs/ldr_A8863.d
+++ b/plugins/arm/v7/opdefs/ldr_A8863.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 144
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 145
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 146
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldr_A8864.d b/plugins/arm/v7/opdefs/ldr_A8864.d
index e6c41d9..c56fa4a 100644
--- a/plugins/arm/v7/opdefs/ldr_A8864.d
+++ b/plugins/arm/v7/opdefs/ldr_A8864.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 147
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -63,6 +65,8 @@
 
 	@syntax {
 
+		@subid 148
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -89,6 +93,8 @@
 
 	@syntax {
 
+		@subid 149
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldr_A8865.d b/plugins/arm/v7/opdefs/ldr_A8865.d
index 7199571..f314cd4 100644
--- a/plugins/arm/v7/opdefs/ldr_A8865.d
+++ b/plugins/arm/v7/opdefs/ldr_A8865.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 150
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 151
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldr_A8866.d b/plugins/arm/v7/opdefs/ldr_A8866.d
index 2917faf..9640894 100644
--- a/plugins/arm/v7/opdefs/ldr_A8866.d
+++ b/plugins/arm/v7/opdefs/ldr_A8866.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 152
+
 		@assert {
 
 			P == 1
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 153
+
 		@assert {
 
 			P == 1
@@ -95,6 +99,8 @@
 
 	@syntax {
 
+		@subid 154
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrb_A8867.d b/plugins/arm/v7/opdefs/ldrb_A8867.d
index f239eda..d42f086 100644
--- a/plugins/arm/v7/opdefs/ldrb_A8867.d
+++ b/plugins/arm/v7/opdefs/ldrb_A8867.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 155
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 156
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 157
+
 		@assert {
 
 			P == 1
@@ -101,6 +107,8 @@
 
 	@syntax {
 
+		@subid 158
+
 		@assert {
 
 			P == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 159
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrb_A8868.d b/plugins/arm/v7/opdefs/ldrb_A8868.d
index c60acfd..4a7ef24 100644
--- a/plugins/arm/v7/opdefs/ldrb_A8868.d
+++ b/plugins/arm/v7/opdefs/ldrb_A8868.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 160
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 161
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 162
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrb_A8869.d b/plugins/arm/v7/opdefs/ldrb_A8869.d
index bff4b3d..ae6a83c 100644
--- a/plugins/arm/v7/opdefs/ldrb_A8869.d
+++ b/plugins/arm/v7/opdefs/ldrb_A8869.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 163
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 164
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrb_A8870.d b/plugins/arm/v7/opdefs/ldrb_A8870.d
index e120e46..3a730e0 100644
--- a/plugins/arm/v7/opdefs/ldrb_A8870.d
+++ b/plugins/arm/v7/opdefs/ldrb_A8870.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 165
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 166
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 167
+
 		@assert {
 
 			P == 1
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 168
+
 		@assert {
 
 			P == 1
@@ -138,6 +146,8 @@
 
 	@syntax {
 
+		@subid 169
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrbt_A8871.d b/plugins/arm/v7/opdefs/ldrbt_A8871.d
index e7a59f6..6403ef4 100644
--- a/plugins/arm/v7/opdefs/ldrbt_A8871.d
+++ b/plugins/arm/v7/opdefs/ldrbt_A8871.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 170
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 171
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 172
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrd_A8872.d b/plugins/arm/v7/opdefs/ldrd_A8872.d
index 6498f21..547bec4 100644
--- a/plugins/arm/v7/opdefs/ldrd_A8872.d
+++ b/plugins/arm/v7/opdefs/ldrd_A8872.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 173
+
 		@assert {
 
 			P == 1
@@ -60,6 +62,8 @@
 
 	@syntax {
 
+		@subid 174
+
 		@assert {
 
 			P == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 175
+
 		@assert {
 
 			P == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 176
+
 		@assert {
 
 			P == 1
@@ -141,6 +149,8 @@
 
 	@syntax {
 
+		@subid 177
+
 		@assert {
 
 			P == 1
@@ -170,6 +180,8 @@
 
 	@syntax {
 
+		@subid 178
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrd_A8873.d b/plugins/arm/v7/opdefs/ldrd_A8873.d
index f8e97f7..9b15a15 100644
--- a/plugins/arm/v7/opdefs/ldrd_A8873.d
+++ b/plugins/arm/v7/opdefs/ldrd_A8873.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 179
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 180
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrd_A8874.d b/plugins/arm/v7/opdefs/ldrd_A8874.d
index 6fd7936..1d57312 100644
--- a/plugins/arm/v7/opdefs/ldrd_A8874.d
+++ b/plugins/arm/v7/opdefs/ldrd_A8874.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 181
+
 		@assert {
 
 			P == 1
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 182
+
 		@assert {
 
 			P == 1
@@ -95,6 +99,8 @@
 
 	@syntax {
 
+		@subid 183
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrex_A8875.d b/plugins/arm/v7/opdefs/ldrex_A8875.d
index 73a2355..c5d85cc 100644
--- a/plugins/arm/v7/opdefs/ldrex_A8875.d
+++ b/plugins/arm/v7/opdefs/ldrex_A8875.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 184
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 185
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrexb_A8876.d b/plugins/arm/v7/opdefs/ldrexb_A8876.d
index 1b003ac..c90f3fe 100644
--- a/plugins/arm/v7/opdefs/ldrexb_A8876.d
+++ b/plugins/arm/v7/opdefs/ldrexb_A8876.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 186
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 187
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrexd_A8877.d b/plugins/arm/v7/opdefs/ldrexd_A8877.d
index 4555e2f..16b59dc 100644
--- a/plugins/arm/v7/opdefs/ldrexd_A8877.d
+++ b/plugins/arm/v7/opdefs/ldrexd_A8877.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 188
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 189
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrexh_A8878.d b/plugins/arm/v7/opdefs/ldrexh_A8878.d
index 5407195..fb08874 100644
--- a/plugins/arm/v7/opdefs/ldrexh_A8878.d
+++ b/plugins/arm/v7/opdefs/ldrexh_A8878.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 190
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 191
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrh_A8879.d b/plugins/arm/v7/opdefs/ldrh_A8879.d
index b38dbf8..75177f0 100644
--- a/plugins/arm/v7/opdefs/ldrh_A8879.d
+++ b/plugins/arm/v7/opdefs/ldrh_A8879.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 192
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 193
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 194
+
 		@assert {
 
 			P == 1
@@ -101,6 +107,8 @@
 
 	@syntax {
 
+		@subid 195
+
 		@assert {
 
 			P == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 196
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrh_A8880.d b/plugins/arm/v7/opdefs/ldrh_A8880.d
index 305313e..f63e805 100644
--- a/plugins/arm/v7/opdefs/ldrh_A8880.d
+++ b/plugins/arm/v7/opdefs/ldrh_A8880.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 197
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 198
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 199
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrh_A8881.d b/plugins/arm/v7/opdefs/ldrh_A8881.d
index 495afdb..83baf79 100644
--- a/plugins/arm/v7/opdefs/ldrh_A8881.d
+++ b/plugins/arm/v7/opdefs/ldrh_A8881.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 200
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 201
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrh_A8882.d b/plugins/arm/v7/opdefs/ldrh_A8882.d
index eba872a..31f20cf 100644
--- a/plugins/arm/v7/opdefs/ldrh_A8882.d
+++ b/plugins/arm/v7/opdefs/ldrh_A8882.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 202
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 203
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 204
+
 		@assert {
 
 			P == 1
@@ -108,6 +114,8 @@
 
 	@syntax {
 
+		@subid 205
+
 		@assert {
 
 			P == 1
@@ -136,6 +144,8 @@
 
 	@syntax {
 
+		@subid 206
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrht_A8883.d b/plugins/arm/v7/opdefs/ldrht_A8883.d
index 22ec62a..851d06b 100644
--- a/plugins/arm/v7/opdefs/ldrht_A8883.d
+++ b/plugins/arm/v7/opdefs/ldrht_A8883.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 207
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 208
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 209
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrsb_A8884.d b/plugins/arm/v7/opdefs/ldrsb_A8884.d
index efdb1ac..327ffd3 100644
--- a/plugins/arm/v7/opdefs/ldrsb_A8884.d
+++ b/plugins/arm/v7/opdefs/ldrsb_A8884.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 210
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 211
+
 		@assert {
 
 			P == 1
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 212
+
 		@assert {
 
 			P == 1
@@ -102,6 +108,8 @@
 
 	@syntax {
 
+		@subid 213
+
 		@assert {
 
 			P == 0
@@ -130,6 +138,8 @@
 
 	@syntax {
 
+		@subid 214
+
 		@assert {
 
 			P == 1
@@ -158,6 +168,8 @@
 
 	@syntax {
 
+		@subid 215
+
 		@assert {
 
 			P == 1
@@ -186,6 +198,8 @@
 
 	@syntax {
 
+		@subid 216
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrsb_A8885.d b/plugins/arm/v7/opdefs/ldrsb_A8885.d
index d97345a..5c1447d 100644
--- a/plugins/arm/v7/opdefs/ldrsb_A8885.d
+++ b/plugins/arm/v7/opdefs/ldrsb_A8885.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 217
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 218
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrsb_A8886.d b/plugins/arm/v7/opdefs/ldrsb_A8886.d
index 05ce494..50b611d 100644
--- a/plugins/arm/v7/opdefs/ldrsb_A8886.d
+++ b/plugins/arm/v7/opdefs/ldrsb_A8886.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 219
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 220
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 221
+
 		@assert {
 
 			P == 1
@@ -108,6 +114,8 @@
 
 	@syntax {
 
+		@subid 222
+
 		@assert {
 
 			P == 1
@@ -136,6 +144,8 @@
 
 	@syntax {
 
+		@subid 223
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrsbt_A8887.d b/plugins/arm/v7/opdefs/ldrsbt_A8887.d
index 4adf33e..f90d8b7 100644
--- a/plugins/arm/v7/opdefs/ldrsbt_A8887.d
+++ b/plugins/arm/v7/opdefs/ldrsbt_A8887.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 224
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 225
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 226
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrsh_A8888.d b/plugins/arm/v7/opdefs/ldrsh_A8888.d
index f9d145f..a5ae458 100644
--- a/plugins/arm/v7/opdefs/ldrsh_A8888.d
+++ b/plugins/arm/v7/opdefs/ldrsh_A8888.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 227
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 228
+
 		@assert {
 
 			P == 1
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 229
+
 		@assert {
 
 			P == 1
@@ -102,6 +108,8 @@
 
 	@syntax {
 
+		@subid 230
+
 		@assert {
 
 			P == 0
@@ -130,6 +138,8 @@
 
 	@syntax {
 
+		@subid 231
+
 		@assert {
 
 			P == 1
@@ -158,6 +168,8 @@
 
 	@syntax {
 
+		@subid 232
+
 		@assert {
 
 			P == 1
@@ -186,6 +198,8 @@
 
 	@syntax {
 
+		@subid 233
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrsh_A8889.d b/plugins/arm/v7/opdefs/ldrsh_A8889.d
index 2831d0d..8ea8d24 100644
--- a/plugins/arm/v7/opdefs/ldrsh_A8889.d
+++ b/plugins/arm/v7/opdefs/ldrsh_A8889.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 234
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 235
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrsh_A8890.d b/plugins/arm/v7/opdefs/ldrsh_A8890.d
index a3ed440..9f0fb46 100644
--- a/plugins/arm/v7/opdefs/ldrsh_A8890.d
+++ b/plugins/arm/v7/opdefs/ldrsh_A8890.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 236
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 237
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 238
+
 		@assert {
 
 			P == 1
@@ -108,6 +114,8 @@
 
 	@syntax {
 
+		@subid 239
+
 		@assert {
 
 			P == 1
@@ -136,6 +144,8 @@
 
 	@syntax {
 
+		@subid 240
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/ldrsht_A8891.d b/plugins/arm/v7/opdefs/ldrsht_A8891.d
index 8d42214..759a6d8 100644
--- a/plugins/arm/v7/opdefs/ldrsht_A8891.d
+++ b/plugins/arm/v7/opdefs/ldrsht_A8891.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 241
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 242
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 243
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/ldrt_A8892.d b/plugins/arm/v7/opdefs/ldrt_A8892.d
index 8a54847..be38438 100644
--- a/plugins/arm/v7/opdefs/ldrt_A8892.d
+++ b/plugins/arm/v7/opdefs/ldrt_A8892.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 244
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 245
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 246
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/lsl_A8894.d b/plugins/arm/v7/opdefs/lsl_A8894.d
index eb073a8..617991f 100644
--- a/plugins/arm/v7/opdefs/lsl_A8894.d
+++ b/plugins/arm/v7/opdefs/lsl_A8894.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 247
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 248
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 249
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 250
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 251
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/lsl_A8895.d b/plugins/arm/v7/opdefs/lsl_A8895.d
index 7ca0470..761e2dc 100644
--- a/plugins/arm/v7/opdefs/lsl_A8895.d
+++ b/plugins/arm/v7/opdefs/lsl_A8895.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 252
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 253
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 254
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 255
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 256
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/lsr_A8896.d b/plugins/arm/v7/opdefs/lsr_A8896.d
index 77d08a2..07e1e21 100644
--- a/plugins/arm/v7/opdefs/lsr_A8896.d
+++ b/plugins/arm/v7/opdefs/lsr_A8896.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 257
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 258
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 259
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 260
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 261
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/lsr_A8897.d b/plugins/arm/v7/opdefs/lsr_A8897.d
index a7d529d..d0fd071 100644
--- a/plugins/arm/v7/opdefs/lsr_A8897.d
+++ b/plugins/arm/v7/opdefs/lsr_A8897.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 262
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 263
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 264
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 265
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 266
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mcr_A8898.d b/plugins/arm/v7/opdefs/mcr_A8898.d
index fa35afc..c18639e 100644
--- a/plugins/arm/v7/opdefs/mcr_A8898.d
+++ b/plugins/arm/v7/opdefs/mcr_A8898.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 267
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -54,12 +56,14 @@
 
 }
 
-@encoding (A1) {
+@encoding (T2) {
 
-	@word 1 1 1 0 1 1 1 0 opc1(3) 0 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
+	@word 1 1 1 1 1 1 1 0 opc1(3) 0 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
 
 	@syntax {
 
+		@subid 268
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -77,12 +81,14 @@
 
 }
 
-@encoding (T2) {
+@encoding (A1) {
 
-	@word 1 1 1 1 1 1 1 0 opc1(3) 0 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
+	@word 1 1 1 0 1 1 1 0 opc1(3) 0 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
 
 	@syntax {
 
+		@subid 269
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 270
+
 		@conv {
 
 			cp = CoProcessor(coproc)
diff --git a/plugins/arm/v7/opdefs/mcrr_A8899.d b/plugins/arm/v7/opdefs/mcrr_A8899.d
index adc3a38..a7aa837 100644
--- a/plugins/arm/v7/opdefs/mcrr_A8899.d
+++ b/plugins/arm/v7/opdefs/mcrr_A8899.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 271
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -53,12 +55,14 @@
 
 }
 
-@encoding (A1) {
+@encoding (T2) {
 
-	@word 1 1 1 0 1 1 0 0 0 1 0 0 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
+	@word 1 1 1 1 1 1 0 0 0 1 0 0 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
 
 	@syntax {
 
+		@subid 272
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -75,12 +79,14 @@
 
 }
 
-@encoding (T2) {
+@encoding (A1) {
 
-	@word 1 1 1 1 1 1 0 0 0 1 0 0 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
+	@word 1 1 1 0 1 1 0 0 0 1 0 0 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
 
 	@syntax {
 
+		@subid 273
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 274
+
 		@conv {
 
 			cp = CoProcessor(coproc)
diff --git a/plugins/arm/v7/opdefs/mla_A88100.d b/plugins/arm/v7/opdefs/mla_A88100.d
index 661720f..c1d5c73 100644
--- a/plugins/arm/v7/opdefs/mla_A88100.d
+++ b/plugins/arm/v7/opdefs/mla_A88100.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 275
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 276
+
 		@assert {
 
 			S == 0
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 277
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mls_A88101.d b/plugins/arm/v7/opdefs/mls_A88101.d
index 44ca17b..54dfe42 100644
--- a/plugins/arm/v7/opdefs/mls_A88101.d
+++ b/plugins/arm/v7/opdefs/mls_A88101.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 278
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 279
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/mov_A88102.d b/plugins/arm/v7/opdefs/mov_A88102.d
index 1d06076..f68fed6 100644
--- a/plugins/arm/v7/opdefs/mov_A88102.d
+++ b/plugins/arm/v7/opdefs/mov_A88102.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 280
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 281
+
 		@assert {
 
 			S == 0
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 282
+
 		@assert {
 
 			S == 1
@@ -100,6 +106,8 @@
 
 	@syntax {
 
+		@subid 283
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -119,6 +127,8 @@
 
 	@syntax {
 
+		@subid 284
+
 		@assert {
 
 			S == 0
@@ -144,6 +154,8 @@
 
 	@syntax {
 
+		@subid 285
+
 		@assert {
 
 			S == 1
@@ -175,6 +187,8 @@
 
 	@syntax {
 
+		@subid 286
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/mov_A88103.d b/plugins/arm/v7/opdefs/mov_A88103.d
index a51accc..c4a9f97 100644
--- a/plugins/arm/v7/opdefs/mov_A88103.d
+++ b/plugins/arm/v7/opdefs/mov_A88103.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 287
+
 		@conv {
 
 			reg_D = Register(D:Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 288
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 289
+
 		@assert {
 
 			S == 0
@@ -94,6 +100,8 @@
 
 	@syntax {
 
+		@subid 290
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mov_A88104.d b/plugins/arm/v7/opdefs/mov_A88104.d
index da7ffd8..c619baa 100644
--- a/plugins/arm/v7/opdefs/mov_A88104.d
+++ b/plugins/arm/v7/opdefs/mov_A88104.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 291
+
 		@assert {
 
 			S == 0
@@ -62,6 +64,8 @@
 
 	@syntax {
 
+		@subid 292
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/movt_A88106.d b/plugins/arm/v7/opdefs/movt_A88106.d
index d3ac58d..852b745 100644
--- a/plugins/arm/v7/opdefs/movt_A88106.d
+++ b/plugins/arm/v7/opdefs/movt_A88106.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 293
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 294
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/mrc_A88107.d b/plugins/arm/v7/opdefs/mrc_A88107.d
index a1315a4..04591e7 100644
--- a/plugins/arm/v7/opdefs/mrc_A88107.d
+++ b/plugins/arm/v7/opdefs/mrc_A88107.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 295
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -54,12 +56,14 @@
 
 }
 
-@encoding (A1) {
+@encoding (T2) {
 
-	@word 1 1 1 0 1 1 1 0 opc1(3) 1 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
+	@word 1 1 1 1 1 1 1 0 opc1(3) 1 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
 
 	@syntax {
 
+		@subid 296
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -77,12 +81,14 @@
 
 }
 
-@encoding (T2) {
+@encoding (A1) {
 
-	@word 1 1 1 1 1 1 1 0 opc1(3) 1 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
+	@word 1 1 1 0 1 1 1 0 opc1(3) 1 CRn(4) Rt(4) coproc(4) opc2(3) 1 CRm(4)
 
 	@syntax {
 
+		@subid 297
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 298
+
 		@conv {
 
 			cp = CoProcessor(coproc)
diff --git a/plugins/arm/v7/opdefs/mrrc_A88108.d b/plugins/arm/v7/opdefs/mrrc_A88108.d
index cfb6a81..0e33e6c 100644
--- a/plugins/arm/v7/opdefs/mrrc_A88108.d
+++ b/plugins/arm/v7/opdefs/mrrc_A88108.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 299
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -53,12 +55,14 @@
 
 }
 
-@encoding (A1) {
+@encoding (T2) {
 
-	@word 1 1 1 0 1 1 0 0 0 1 0 1 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
+	@word 1 1 1 1 1 1 0 0 0 1 0 1 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
 
 	@syntax {
 
+		@subid 300
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -75,12 +79,14 @@
 
 }
 
-@encoding (T2) {
+@encoding (A1) {
 
-	@word 1 1 1 1 1 1 0 0 0 1 0 1 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
+	@word 1 1 1 0 1 1 0 0 0 1 0 1 Rt2(4) Rt(4) coproc(4) opc1(4) CRm(4)
 
 	@syntax {
 
+		@subid 301
+
 		@conv {
 
 			cp = CoProcessor(coproc)
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 302
+
 		@conv {
 
 			cp = CoProcessor(coproc)
diff --git a/plugins/arm/v7/opdefs/mul_A88114.d b/plugins/arm/v7/opdefs/mul_A88114.d
index bc7ccd8..a246a56 100644
--- a/plugins/arm/v7/opdefs/mul_A88114.d
+++ b/plugins/arm/v7/opdefs/mul_A88114.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 303
+
 		@conv {
 
 			reg_D = Register(Rdm)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 304
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 305
+
 		@assert {
 
 			S == 0
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 306
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mvn_A88115.d b/plugins/arm/v7/opdefs/mvn_A88115.d
index 083a477..5c23abb 100644
--- a/plugins/arm/v7/opdefs/mvn_A88115.d
+++ b/plugins/arm/v7/opdefs/mvn_A88115.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 307
+
 		@assert {
 
 			S == 0
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 308
+
 		@assert {
 
 			S == 1
@@ -81,6 +85,8 @@
 
 	@syntax {
 
+		@subid 309
+
 		@assert {
 
 			S == 0
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 310
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mvn_A88116.d b/plugins/arm/v7/opdefs/mvn_A88116.d
index 764a7cd..25185c9 100644
--- a/plugins/arm/v7/opdefs/mvn_A88116.d
+++ b/plugins/arm/v7/opdefs/mvn_A88116.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 311
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 312
+
 		@assert {
 
 			S == 0
@@ -76,6 +80,8 @@
 
 	@syntax {
 
+		@subid 313
+
 		@assert {
 
 			S == 1
@@ -102,6 +108,8 @@
 
 	@syntax {
 
+		@subid 314
+
 		@assert {
 
 			S == 0
@@ -128,6 +136,8 @@
 
 	@syntax {
 
+		@subid 315
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/mvn_A88117.d b/plugins/arm/v7/opdefs/mvn_A88117.d
index 71b4515..813d735 100644
--- a/plugins/arm/v7/opdefs/mvn_A88117.d
+++ b/plugins/arm/v7/opdefs/mvn_A88117.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 316
+
 		@assert {
 
 			S == 0
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 317
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/nop_A88119.d b/plugins/arm/v7/opdefs/nop_A88119.d
index a36379d..1ea0e96 100644
--- a/plugins/arm/v7/opdefs/nop_A88119.d
+++ b/plugins/arm/v7/opdefs/nop_A88119.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 318
+
 		@asm nop
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 319
+
 		@asm nop.w
 
 	}
@@ -61,6 +65,8 @@
 
 	@syntax {
 
+		@subid 320
+
 		@asm nop
 
 		@rules {
diff --git a/plugins/arm/v7/opdefs/orn_A88120.d b/plugins/arm/v7/opdefs/orn_A88120.d
index 3c376fd..4f3091c 100644
--- a/plugins/arm/v7/opdefs/orn_A88120.d
+++ b/plugins/arm/v7/opdefs/orn_A88120.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 321
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 322
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/orn_A88121.d b/plugins/arm/v7/opdefs/orn_A88121.d
index b0f6046..fcc9898 100644
--- a/plugins/arm/v7/opdefs/orn_A88121.d
+++ b/plugins/arm/v7/opdefs/orn_A88121.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 323
+
 		@assert {
 
 			S == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 324
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/orr_A88122.d b/plugins/arm/v7/opdefs/orr_A88122.d
index 6729f7c..be54518 100644
--- a/plugins/arm/v7/opdefs/orr_A88122.d
+++ b/plugins/arm/v7/opdefs/orr_A88122.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 325
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 326
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 327
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 328
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/orr_A88123.d b/plugins/arm/v7/opdefs/orr_A88123.d
index 8e6cc97..923b766 100644
--- a/plugins/arm/v7/opdefs/orr_A88123.d
+++ b/plugins/arm/v7/opdefs/orr_A88123.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 329
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 330
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 331
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 332
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 333
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/orr_A88124.d b/plugins/arm/v7/opdefs/orr_A88124.d
index d376530..85ddeba 100644
--- a/plugins/arm/v7/opdefs/orr_A88124.d
+++ b/plugins/arm/v7/opdefs/orr_A88124.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 334
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 335
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/pkh_A88125.d b/plugins/arm/v7/opdefs/pkh_A88125.d
index eab5071..76c185c 100644
--- a/plugins/arm/v7/opdefs/pkh_A88125.d
+++ b/plugins/arm/v7/opdefs/pkh_A88125.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 336
+
 		@assert {
 
 			tb == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 337
+
 		@assert {
 
 			tb == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 338
+
 		@assert {
 
 			tb == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 339
+
 		@assert {
 
 			tb == 1
diff --git a/plugins/arm/v7/opdefs/pld_A88126.d b/plugins/arm/v7/opdefs/pld_A88126.d
index e3899db..7e4994f 100644
--- a/plugins/arm/v7/opdefs/pld_A88126.d
+++ b/plugins/arm/v7/opdefs/pld_A88126.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 340
+
 		@assert {
 
 			W == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 341
+
 		@assert {
 
 			W == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 342
+
 		@assert {
 
 			W == 0
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 343
+
 		@assert {
 
 			W == 1
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 344
+
 		@assert {
 
 			R == 1
@@ -149,6 +159,8 @@
 
 	@syntax {
 
+		@subid 345
+
 		@assert {
 
 			R == 0
diff --git a/plugins/arm/v7/opdefs/pld_A88127.d b/plugins/arm/v7/opdefs/pld_A88127.d
index 5939a0c..49f27c8 100644
--- a/plugins/arm/v7/opdefs/pld_A88127.d
+++ b/plugins/arm/v7/opdefs/pld_A88127.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 346
+
 		@conv {
 
 			imm32 = ZeroExtend(imm12, 32)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 347
+
 		@conv {
 
 			imm32 = ZeroExtend(imm12, 32)
diff --git a/plugins/arm/v7/opdefs/pld_A88128.d b/plugins/arm/v7/opdefs/pld_A88128.d
index f6cf0a3..50c9bc8 100644
--- a/plugins/arm/v7/opdefs/pld_A88128.d
+++ b/plugins/arm/v7/opdefs/pld_A88128.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 348
+
 		@assert {
 
 			W == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 349
+
 		@assert {
 
 			W == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 350
+
 		@assert {
 
 			R == 1
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 351
+
 		@assert {
 
 			R == 0
diff --git a/plugins/arm/v7/opdefs/pop_A88131.d b/plugins/arm/v7/opdefs/pop_A88131.d
index c831d17..2881669 100644
--- a/plugins/arm/v7/opdefs/pop_A88131.d
+++ b/plugins/arm/v7/opdefs/pop_A88131.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 352
+
 		@conv {
 
 			registers = RegList(P:'0000000':register_list)
@@ -61,6 +63,8 @@
 
 	@syntax {
 
+		@subid 353
+
 		@conv {
 
 			registers = RegList(P:M:'0':register_list)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 354
+
 		@conv {
 
 			registers = SingleRegList(Rt)
diff --git a/plugins/arm/v7/opdefs/pop_A88132.d b/plugins/arm/v7/opdefs/pop_A88132.d
index 1846b7a..2cdfdfe 100644
--- a/plugins/arm/v7/opdefs/pop_A88132.d
+++ b/plugins/arm/v7/opdefs/pop_A88132.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 355
+
 		@conv {
 
 			registers = RegList(register_list)
@@ -67,6 +69,8 @@
 
 	@syntax {
 
+		@subid 356
+
 		@conv {
 
 			registers = SingleRegList(Rt)
diff --git a/plugins/arm/v7/opdefs/push_A88133.d b/plugins/arm/v7/opdefs/push_A88133.d
index d3b08c8..91be90b 100644
--- a/plugins/arm/v7/opdefs/push_A88133.d
+++ b/plugins/arm/v7/opdefs/push_A88133.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 357
+
 		@conv {
 
 			registers = RegList('0':M:'000000':register_list)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 358
+
 		@conv {
 
 			registers = RegList('0':M:'0':register_list)
@@ -73,6 +77,8 @@
 
 	@syntax {
 
+		@subid 359
+
 		@conv {
 
 			registers = SingleRegList(Rt)
@@ -91,6 +97,8 @@
 
 	@syntax {
 
+		@subid 360
+
 		@conv {
 
 			registers = RegList(register_list)
@@ -115,6 +123,8 @@
 
 	@syntax {
 
+		@subid 361
+
 		@conv {
 
 			registers = SingleRegList(Rt)
diff --git a/plugins/arm/v7/opdefs/qadd16_A88135.d b/plugins/arm/v7/opdefs/qadd16_A88135.d
index ca9371b..175ffe4 100644
--- a/plugins/arm/v7/opdefs/qadd16_A88135.d
+++ b/plugins/arm/v7/opdefs/qadd16_A88135.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 364
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 365
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qadd8_A88136.d b/plugins/arm/v7/opdefs/qadd8_A88136.d
index f3a07bd..6a6fd13 100644
--- a/plugins/arm/v7/opdefs/qadd8_A88136.d
+++ b/plugins/arm/v7/opdefs/qadd8_A88136.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 366
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 367
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qadd_A88134.d b/plugins/arm/v7/opdefs/qadd_A88134.d
index 2ced9c3..ab57530 100644
--- a/plugins/arm/v7/opdefs/qadd_A88134.d
+++ b/plugins/arm/v7/opdefs/qadd_A88134.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 362
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 363
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qasx_A88137.d b/plugins/arm/v7/opdefs/qasx_A88137.d
index 531bad7..ed856ae 100644
--- a/plugins/arm/v7/opdefs/qasx_A88137.d
+++ b/plugins/arm/v7/opdefs/qasx_A88137.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 368
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 369
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qdadd_A88138.d b/plugins/arm/v7/opdefs/qdadd_A88138.d
index 48f2169..cb32dab 100644
--- a/plugins/arm/v7/opdefs/qdadd_A88138.d
+++ b/plugins/arm/v7/opdefs/qdadd_A88138.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 370
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 371
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qdsub_A88139.d b/plugins/arm/v7/opdefs/qdsub_A88139.d
index 0e2398f..b510e45 100644
--- a/plugins/arm/v7/opdefs/qdsub_A88139.d
+++ b/plugins/arm/v7/opdefs/qdsub_A88139.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 372
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 373
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qsax_A88140.d b/plugins/arm/v7/opdefs/qsax_A88140.d
index e17c7f1..4953c88 100644
--- a/plugins/arm/v7/opdefs/qsax_A88140.d
+++ b/plugins/arm/v7/opdefs/qsax_A88140.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 374
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 375
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qsub16_A88142.d b/plugins/arm/v7/opdefs/qsub16_A88142.d
index 1176d51..5a9c950 100644
--- a/plugins/arm/v7/opdefs/qsub16_A88142.d
+++ b/plugins/arm/v7/opdefs/qsub16_A88142.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 378
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 379
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qsub8_A88143.d b/plugins/arm/v7/opdefs/qsub8_A88143.d
index e6d5924..518cde9 100644
--- a/plugins/arm/v7/opdefs/qsub8_A88143.d
+++ b/plugins/arm/v7/opdefs/qsub8_A88143.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 380
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 381
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/qsub_A88141.d b/plugins/arm/v7/opdefs/qsub_A88141.d
index 08f36a9..9fc14da 100644
--- a/plugins/arm/v7/opdefs/qsub_A88141.d
+++ b/plugins/arm/v7/opdefs/qsub_A88141.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 376
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 377
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/rbit_A88144.d b/plugins/arm/v7/opdefs/rbit_A88144.d
index 07a8023..b868310 100644
--- a/plugins/arm/v7/opdefs/rbit_A88144.d
+++ b/plugins/arm/v7/opdefs/rbit_A88144.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 382
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 383
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/rev16_A88146.d b/plugins/arm/v7/opdefs/rev16_A88146.d
index 45135d3..adb8f0b 100644
--- a/plugins/arm/v7/opdefs/rev16_A88146.d
+++ b/plugins/arm/v7/opdefs/rev16_A88146.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 387
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 388
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 389
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/rev_A88145.d b/plugins/arm/v7/opdefs/rev_A88145.d
index 36413c3..392e90c 100644
--- a/plugins/arm/v7/opdefs/rev_A88145.d
+++ b/plugins/arm/v7/opdefs/rev_A88145.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 384
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 385
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 386
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/revsh_A88147.d b/plugins/arm/v7/opdefs/revsh_A88147.d
index 28c101a..37df8b8 100644
--- a/plugins/arm/v7/opdefs/revsh_A88147.d
+++ b/plugins/arm/v7/opdefs/revsh_A88147.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 390
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 391
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -75,6 +79,8 @@
 
 	@syntax {
 
+		@subid 392
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ror_A88149.d b/plugins/arm/v7/opdefs/ror_A88149.d
index 962e37e..5cb9893 100644
--- a/plugins/arm/v7/opdefs/ror_A88149.d
+++ b/plugins/arm/v7/opdefs/ror_A88149.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 393
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 394
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 395
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 396
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/ror_A88150.d b/plugins/arm/v7/opdefs/ror_A88150.d
index aec86e3..5c62d28 100644
--- a/plugins/arm/v7/opdefs/ror_A88150.d
+++ b/plugins/arm/v7/opdefs/ror_A88150.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 397
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 398
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 399
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 400
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 401
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rrx_A88151.d b/plugins/arm/v7/opdefs/rrx_A88151.d
index 2d16327..1e26aa3 100644
--- a/plugins/arm/v7/opdefs/rrx_A88151.d
+++ b/plugins/arm/v7/opdefs/rrx_A88151.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 402
+
 		@assert {
 
 			S == 0
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 403
+
 		@assert {
 
 			S == 1
@@ -81,6 +85,8 @@
 
 	@syntax {
 
+		@subid 404
+
 		@assert {
 
 			S == 0
@@ -106,6 +112,8 @@
 
 	@syntax {
 
+		@subid 405
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsb_A88152.d b/plugins/arm/v7/opdefs/rsb_A88152.d
index 3e035ac..6eb7139 100644
--- a/plugins/arm/v7/opdefs/rsb_A88152.d
+++ b/plugins/arm/v7/opdefs/rsb_A88152.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 406
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 407
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 408
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 409
+
 		@assert {
 
 			S == 0
@@ -129,6 +137,8 @@
 
 	@syntax {
 
+		@subid 410
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsb_A88153.d b/plugins/arm/v7/opdefs/rsb_A88153.d
index cd2e6f5..a1fc0cc 100644
--- a/plugins/arm/v7/opdefs/rsb_A88153.d
+++ b/plugins/arm/v7/opdefs/rsb_A88153.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 411
+
 		@assert {
 
 			S == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 412
+
 		@assert {
 
 			S == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 413
+
 		@assert {
 
 			S == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 414
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsb_A88154.d b/plugins/arm/v7/opdefs/rsb_A88154.d
index f3d3651..c35f396 100644
--- a/plugins/arm/v7/opdefs/rsb_A88154.d
+++ b/plugins/arm/v7/opdefs/rsb_A88154.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 415
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 416
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsc_A88155.d b/plugins/arm/v7/opdefs/rsc_A88155.d
index 49a0c57..e9eb02d 100644
--- a/plugins/arm/v7/opdefs/rsc_A88155.d
+++ b/plugins/arm/v7/opdefs/rsc_A88155.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 417
+
 		@assert {
 
 			S == 0
@@ -63,6 +65,8 @@
 
 	@syntax {
 
+		@subid 418
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsc_A88156.d b/plugins/arm/v7/opdefs/rsc_A88156.d
index 59c0adb..e97f13e 100644
--- a/plugins/arm/v7/opdefs/rsc_A88156.d
+++ b/plugins/arm/v7/opdefs/rsc_A88156.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 419
+
 		@assert {
 
 			S == 0
@@ -64,6 +66,8 @@
 
 	@syntax {
 
+		@subid 420
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/rsc_A88157.d b/plugins/arm/v7/opdefs/rsc_A88157.d
index b9daae5..1280b3f 100644
--- a/plugins/arm/v7/opdefs/rsc_A88157.d
+++ b/plugins/arm/v7/opdefs/rsc_A88157.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 421
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 422
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sadd16_A88158.d b/plugins/arm/v7/opdefs/sadd16_A88158.d
index e69867d..9fa7760 100644
--- a/plugins/arm/v7/opdefs/sadd16_A88158.d
+++ b/plugins/arm/v7/opdefs/sadd16_A88158.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 423
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 424
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sadd8_A88159.d b/plugins/arm/v7/opdefs/sadd8_A88159.d
index 74c1e87..3420e45 100644
--- a/plugins/arm/v7/opdefs/sadd8_A88159.d
+++ b/plugins/arm/v7/opdefs/sadd8_A88159.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 425
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 426
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sasx_A88160.d b/plugins/arm/v7/opdefs/sasx_A88160.d
index 21e76d8..1056630 100644
--- a/plugins/arm/v7/opdefs/sasx_A88160.d
+++ b/plugins/arm/v7/opdefs/sasx_A88160.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 427
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 428
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sbc_A88161.d b/plugins/arm/v7/opdefs/sbc_A88161.d
index 43481aa..8243825 100644
--- a/plugins/arm/v7/opdefs/sbc_A88161.d
+++ b/plugins/arm/v7/opdefs/sbc_A88161.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 429
+
 		@assert {
 
 			S == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 430
+
 		@assert {
 
 			S == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 431
+
 		@assert {
 
 			S == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 432
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sbc_A88162.d b/plugins/arm/v7/opdefs/sbc_A88162.d
index f28187b..4504b1a 100644
--- a/plugins/arm/v7/opdefs/sbc_A88162.d
+++ b/plugins/arm/v7/opdefs/sbc_A88162.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 433
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 434
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 435
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 436
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 437
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sbc_A88163.d b/plugins/arm/v7/opdefs/sbc_A88163.d
index 96ce70d..5d54b34 100644
--- a/plugins/arm/v7/opdefs/sbc_A88163.d
+++ b/plugins/arm/v7/opdefs/sbc_A88163.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 438
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 439
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sbfx_A88164.d b/plugins/arm/v7/opdefs/sbfx_A88164.d
index 688d67b..c28c39c 100644
--- a/plugins/arm/v7/opdefs/sbfx_A88164.d
+++ b/plugins/arm/v7/opdefs/sbfx_A88164.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 440
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -59,6 +61,8 @@
 
 	@syntax {
 
+		@subid 441
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sdiv_A88165.d b/plugins/arm/v7/opdefs/sdiv_A88165.d
index c6017d5..2852046 100644
--- a/plugins/arm/v7/opdefs/sdiv_A88165.d
+++ b/plugins/arm/v7/opdefs/sdiv_A88165.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 442
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 443
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sel_A88166.d b/plugins/arm/v7/opdefs/sel_A88166.d
index 6fd5023..5b5e332 100644
--- a/plugins/arm/v7/opdefs/sel_A88166.d
+++ b/plugins/arm/v7/opdefs/sel_A88166.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 444
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 445
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/setend_A88167.d b/plugins/arm/v7/opdefs/setend_A88167.d
index 76f745c..1e6de01 100644
--- a/plugins/arm/v7/opdefs/setend_A88167.d
+++ b/plugins/arm/v7/opdefs/setend_A88167.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 446
+
 		@conv {
 
 			endian_specifier = Endian(E)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 447
+
 		@conv {
 
 			endian_specifier = Endian(E)
diff --git a/plugins/arm/v7/opdefs/sev_A88168.d b/plugins/arm/v7/opdefs/sev_A88168.d
index 5939afb..90f6056 100644
--- a/plugins/arm/v7/opdefs/sev_A88168.d
+++ b/plugins/arm/v7/opdefs/sev_A88168.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 448
+
 		@asm sev
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 449
+
 		@asm sev.w
 
 	}
@@ -61,6 +65,8 @@
 
 	@syntax {
 
+		@subid 450
+
 		@asm sev
 
 		@rules {
diff --git a/plugins/arm/v7/opdefs/shadd16_A88169.d b/plugins/arm/v7/opdefs/shadd16_A88169.d
index a408e3c..98c6768 100644
--- a/plugins/arm/v7/opdefs/shadd16_A88169.d
+++ b/plugins/arm/v7/opdefs/shadd16_A88169.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 451
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 452
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/shadd8_A88170.d b/plugins/arm/v7/opdefs/shadd8_A88170.d
index 0cfff4e..71cc9cf 100644
--- a/plugins/arm/v7/opdefs/shadd8_A88170.d
+++ b/plugins/arm/v7/opdefs/shadd8_A88170.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 453
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 454
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/shasx_A88171.d b/plugins/arm/v7/opdefs/shasx_A88171.d
index 243d568..d808b25 100644
--- a/plugins/arm/v7/opdefs/shasx_A88171.d
+++ b/plugins/arm/v7/opdefs/shasx_A88171.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 455
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 456
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/shsax_A88172.d b/plugins/arm/v7/opdefs/shsax_A88172.d
index d176085..59641e3 100644
--- a/plugins/arm/v7/opdefs/shsax_A88172.d
+++ b/plugins/arm/v7/opdefs/shsax_A88172.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 457
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 458
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/shsub16_A88173.d b/plugins/arm/v7/opdefs/shsub16_A88173.d
index 955070d..03bbbe8 100644
--- a/plugins/arm/v7/opdefs/shsub16_A88173.d
+++ b/plugins/arm/v7/opdefs/shsub16_A88173.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 459
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 460
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/shsub8_A88174.d b/plugins/arm/v7/opdefs/shsub8_A88174.d
index d90d270..e0df718 100644
--- a/plugins/arm/v7/opdefs/shsub8_A88174.d
+++ b/plugins/arm/v7/opdefs/shsub8_A88174.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 461
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 462
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/smlad_A88177.d b/plugins/arm/v7/opdefs/smlad_A88177.d
index 5fa0850..9f56ebb 100644
--- a/plugins/arm/v7/opdefs/smlad_A88177.d
+++ b/plugins/arm/v7/opdefs/smlad_A88177.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 463
+
 		@assert {
 
 			M == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 464
+
 		@assert {
 
 			M == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 465
+
 		@assert {
 
 			M == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 466
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/smlal_A88178.d b/plugins/arm/v7/opdefs/smlal_A88178.d
index b504510..e6fcaf8 100644
--- a/plugins/arm/v7/opdefs/smlal_A88178.d
+++ b/plugins/arm/v7/opdefs/smlal_A88178.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 467
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 468
+
 		@assert {
 
 			S == 0
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 469
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/smlald_A88180.d b/plugins/arm/v7/opdefs/smlald_A88180.d
index c44a90b..54e0634 100644
--- a/plugins/arm/v7/opdefs/smlald_A88180.d
+++ b/plugins/arm/v7/opdefs/smlald_A88180.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 470
+
 		@assert {
 
 			M == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 471
+
 		@assert {
 
 			M == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 472
+
 		@assert {
 
 			M == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 473
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/smlsd_A88182.d b/plugins/arm/v7/opdefs/smlsd_A88182.d
index 28546fa..cace235 100644
--- a/plugins/arm/v7/opdefs/smlsd_A88182.d
+++ b/plugins/arm/v7/opdefs/smlsd_A88182.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 474
+
 		@assert {
 
 			M == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 475
+
 		@assert {
 
 			M == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 476
+
 		@assert {
 
 			M == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 477
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/smlsld_A88183.d b/plugins/arm/v7/opdefs/smlsld_A88183.d
index 101ff1c..67545f6 100644
--- a/plugins/arm/v7/opdefs/smlsld_A88183.d
+++ b/plugins/arm/v7/opdefs/smlsld_A88183.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 478
+
 		@assert {
 
 			M == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 479
+
 		@assert {
 
 			M == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 480
+
 		@assert {
 
 			M == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 481
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/smmla_A88184.d b/plugins/arm/v7/opdefs/smmla_A88184.d
index 40c5589..9ac5778 100644
--- a/plugins/arm/v7/opdefs/smmla_A88184.d
+++ b/plugins/arm/v7/opdefs/smmla_A88184.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 482
+
 		@assert {
 
 			R == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 483
+
 		@assert {
 
 			R == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 484
+
 		@assert {
 
 			R == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 485
+
 		@assert {
 
 			R == 1
diff --git a/plugins/arm/v7/opdefs/smmls_A88185.d b/plugins/arm/v7/opdefs/smmls_A88185.d
index 356d60c..ea32b1a 100644
--- a/plugins/arm/v7/opdefs/smmls_A88185.d
+++ b/plugins/arm/v7/opdefs/smmls_A88185.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 486
+
 		@assert {
 
 			R == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 487
+
 		@assert {
 
 			R == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 488
+
 		@assert {
 
 			R == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 489
+
 		@assert {
 
 			R == 1
diff --git a/plugins/arm/v7/opdefs/smmul_A88186.d b/plugins/arm/v7/opdefs/smmul_A88186.d
index 3bfc841..b3d053f 100644
--- a/plugins/arm/v7/opdefs/smmul_A88186.d
+++ b/plugins/arm/v7/opdefs/smmul_A88186.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 490
+
 		@assert {
 
 			R == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 491
+
 		@assert {
 
 			R == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 492
+
 		@assert {
 
 			R == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 493
+
 		@assert {
 
 			R == 1
diff --git a/plugins/arm/v7/opdefs/smuad_A88187.d b/plugins/arm/v7/opdefs/smuad_A88187.d
index 9c994d3..bfdcd43 100644
--- a/plugins/arm/v7/opdefs/smuad_A88187.d
+++ b/plugins/arm/v7/opdefs/smuad_A88187.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 494
+
 		@assert {
 
 			M == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 495
+
 		@assert {
 
 			M == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 496
+
 		@assert {
 
 			M == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 497
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/smull_A88189.d b/plugins/arm/v7/opdefs/smull_A88189.d
index 9604e95..0ecc51b 100644
--- a/plugins/arm/v7/opdefs/smull_A88189.d
+++ b/plugins/arm/v7/opdefs/smull_A88189.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 498
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 499
+
 		@assert {
 
 			S == 0
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 500
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/smusd_A88191.d b/plugins/arm/v7/opdefs/smusd_A88191.d
index e1bd61e..768d616 100644
--- a/plugins/arm/v7/opdefs/smusd_A88191.d
+++ b/plugins/arm/v7/opdefs/smusd_A88191.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 501
+
 		@assert {
 
 			M == 0
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 502
+
 		@assert {
 
 			M == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 503
+
 		@assert {
 
 			M == 0
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 504
+
 		@assert {
 
 			M == 1
diff --git a/plugins/arm/v7/opdefs/ssat16_A88194.d b/plugins/arm/v7/opdefs/ssat16_A88194.d
index 5236af7..30515d0 100644
--- a/plugins/arm/v7/opdefs/ssat16_A88194.d
+++ b/plugins/arm/v7/opdefs/ssat16_A88194.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 507
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 508
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ssat_A88193.d b/plugins/arm/v7/opdefs/ssat_A88193.d
index 93d58cd..7f323b7 100644
--- a/plugins/arm/v7/opdefs/ssat_A88193.d
+++ b/plugins/arm/v7/opdefs/ssat_A88193.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 505
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 506
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ssax_A88195.d b/plugins/arm/v7/opdefs/ssax_A88195.d
index 68c70f7..f7ac18a 100644
--- a/plugins/arm/v7/opdefs/ssax_A88195.d
+++ b/plugins/arm/v7/opdefs/ssax_A88195.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 509
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 510
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ssub16_A88196.d b/plugins/arm/v7/opdefs/ssub16_A88196.d
index 3abdb0e..78a9a4a 100644
--- a/plugins/arm/v7/opdefs/ssub16_A88196.d
+++ b/plugins/arm/v7/opdefs/ssub16_A88196.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 511
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 512
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ssub8_A88197.d b/plugins/arm/v7/opdefs/ssub8_A88197.d
index 39e8eec..38045ce 100644
--- a/plugins/arm/v7/opdefs/ssub8_A88197.d
+++ b/plugins/arm/v7/opdefs/ssub8_A88197.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 513
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 514
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/str_A88203.d b/plugins/arm/v7/opdefs/str_A88203.d
index 98c97a2..d5c5744 100644
--- a/plugins/arm/v7/opdefs/str_A88203.d
+++ b/plugins/arm/v7/opdefs/str_A88203.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 515
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 516
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 517
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -100,6 +106,8 @@
 
 	@syntax {
 
+		@subid 518
+
 		@assert {
 
 			P == 1
@@ -122,6 +130,8 @@
 
 	@syntax {
 
+		@subid 519
+
 		@assert {
 
 			P == 1
@@ -144,6 +154,8 @@
 
 	@syntax {
 
+		@subid 520
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/str_A88204.d b/plugins/arm/v7/opdefs/str_A88204.d
index d0646bd..cee5ff5 100644
--- a/plugins/arm/v7/opdefs/str_A88204.d
+++ b/plugins/arm/v7/opdefs/str_A88204.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 521
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 522
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 523
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/str_A88205.d b/plugins/arm/v7/opdefs/str_A88205.d
index 3f2c87e..59c43a7 100644
--- a/plugins/arm/v7/opdefs/str_A88205.d
+++ b/plugins/arm/v7/opdefs/str_A88205.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 524
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 525
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 526
+
 		@assert {
 
 			P == 1
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 527
+
 		@assert {
 
 			P == 1
@@ -138,6 +146,8 @@
 
 	@syntax {
 
+		@subid 528
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strb_A88206.d b/plugins/arm/v7/opdefs/strb_A88206.d
index 632187b..7cbf681 100644
--- a/plugins/arm/v7/opdefs/strb_A88206.d
+++ b/plugins/arm/v7/opdefs/strb_A88206.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 529
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 530
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 531
+
 		@assert {
 
 			P == 1
@@ -101,6 +107,8 @@
 
 	@syntax {
 
+		@subid 532
+
 		@assert {
 
 			P == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 533
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strb_A88207.d b/plugins/arm/v7/opdefs/strb_A88207.d
index 2495682..2c6a13f 100644
--- a/plugins/arm/v7/opdefs/strb_A88207.d
+++ b/plugins/arm/v7/opdefs/strb_A88207.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 534
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 535
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 536
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strb_A88208.d b/plugins/arm/v7/opdefs/strb_A88208.d
index 45076f4..64ce4d0 100644
--- a/plugins/arm/v7/opdefs/strb_A88208.d
+++ b/plugins/arm/v7/opdefs/strb_A88208.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 537
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 538
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 539
+
 		@assert {
 
 			P == 1
@@ -109,6 +115,8 @@
 
 	@syntax {
 
+		@subid 540
+
 		@assert {
 
 			P == 1
@@ -138,6 +146,8 @@
 
 	@syntax {
 
+		@subid 541
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strbt_A88209.d b/plugins/arm/v7/opdefs/strbt_A88209.d
index 96845d7..8608763 100644
--- a/plugins/arm/v7/opdefs/strbt_A88209.d
+++ b/plugins/arm/v7/opdefs/strbt_A88209.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 542
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 543
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 544
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/strd_A88210.d b/plugins/arm/v7/opdefs/strd_A88210.d
index ec69c7c..feb36a7 100644
--- a/plugins/arm/v7/opdefs/strd_A88210.d
+++ b/plugins/arm/v7/opdefs/strd_A88210.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 545
+
 		@assert {
 
 			P == 1
@@ -60,6 +62,8 @@
 
 	@syntax {
 
+		@subid 546
+
 		@assert {
 
 			P == 1
@@ -83,6 +87,8 @@
 
 	@syntax {
 
+		@subid 547
+
 		@assert {
 
 			P == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 548
+
 		@assert {
 
 			P == 1
@@ -141,6 +149,8 @@
 
 	@syntax {
 
+		@subid 549
+
 		@assert {
 
 			P == 1
@@ -170,6 +180,8 @@
 
 	@syntax {
 
+		@subid 550
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strd_A88211.d b/plugins/arm/v7/opdefs/strd_A88211.d
index 644270b..9ca5cce 100644
--- a/plugins/arm/v7/opdefs/strd_A88211.d
+++ b/plugins/arm/v7/opdefs/strd_A88211.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 551
+
 		@assert {
 
 			P == 1
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 552
+
 		@assert {
 
 			P == 1
@@ -95,6 +99,8 @@
 
 	@syntax {
 
+		@subid 553
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strex_A88212.d b/plugins/arm/v7/opdefs/strex_A88212.d
index 9558c42..1984524 100644
--- a/plugins/arm/v7/opdefs/strex_A88212.d
+++ b/plugins/arm/v7/opdefs/strex_A88212.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 554
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -59,6 +61,8 @@
 
 	@syntax {
 
+		@subid 555
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/strexb_A88213.d b/plugins/arm/v7/opdefs/strexb_A88213.d
index 507fd54..309fdf2 100644
--- a/plugins/arm/v7/opdefs/strexb_A88213.d
+++ b/plugins/arm/v7/opdefs/strexb_A88213.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 556
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 557
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/strexd_A88214.d b/plugins/arm/v7/opdefs/strexd_A88214.d
index 9c21475..7223d8c 100644
--- a/plugins/arm/v7/opdefs/strexd_A88214.d
+++ b/plugins/arm/v7/opdefs/strexd_A88214.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 558
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -59,6 +61,8 @@
 
 	@syntax {
 
+		@subid 559
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/strexh_A88215.d b/plugins/arm/v7/opdefs/strexh_A88215.d
index 68f3d85..d999c68 100644
--- a/plugins/arm/v7/opdefs/strexh_A88215.d
+++ b/plugins/arm/v7/opdefs/strexh_A88215.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 560
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 561
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/strh_A88216.d b/plugins/arm/v7/opdefs/strh_A88216.d
index 49b505e..8e54122 100644
--- a/plugins/arm/v7/opdefs/strh_A88216.d
+++ b/plugins/arm/v7/opdefs/strh_A88216.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 562
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 563
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -79,6 +83,8 @@
 
 	@syntax {
 
+		@subid 564
+
 		@assert {
 
 			P == 1
@@ -101,6 +107,8 @@
 
 	@syntax {
 
+		@subid 565
+
 		@assert {
 
 			P == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 566
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strh_A88217.d b/plugins/arm/v7/opdefs/strh_A88217.d
index 8a74c59..ed44ec0 100644
--- a/plugins/arm/v7/opdefs/strh_A88217.d
+++ b/plugins/arm/v7/opdefs/strh_A88217.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 567
+
 		@assert {
 
 			P == 1
@@ -65,6 +67,8 @@
 
 	@syntax {
 
+		@subid 568
+
 		@assert {
 
 			P == 1
@@ -93,6 +97,8 @@
 
 	@syntax {
 
+		@subid 569
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strh_A88218.d b/plugins/arm/v7/opdefs/strh_A88218.d
index 2656024..ae46b75 100644
--- a/plugins/arm/v7/opdefs/strh_A88218.d
+++ b/plugins/arm/v7/opdefs/strh_A88218.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 570
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 571
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -80,6 +84,8 @@
 
 	@syntax {
 
+		@subid 572
+
 		@assert {
 
 			P == 1
@@ -108,6 +114,8 @@
 
 	@syntax {
 
+		@subid 573
+
 		@assert {
 
 			P == 1
@@ -136,6 +144,8 @@
 
 	@syntax {
 
+		@subid 574
+
 		@assert {
 
 			P == 0
diff --git a/plugins/arm/v7/opdefs/strht_A88219.d b/plugins/arm/v7/opdefs/strht_A88219.d
index 1b8af03..a750b63 100644
--- a/plugins/arm/v7/opdefs/strht_A88219.d
+++ b/plugins/arm/v7/opdefs/strht_A88219.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 575
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 576
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 577
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/strt_A88220.d b/plugins/arm/v7/opdefs/strt_A88220.d
index 749dad4..cc113b3 100644
--- a/plugins/arm/v7/opdefs/strt_A88220.d
+++ b/plugins/arm/v7/opdefs/strt_A88220.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 578
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 579
+
 		@conv {
 
 			reg_T = Register(Rt)
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 580
+
 		@conv {
 
 			reg_T = Register(Rt)
diff --git a/plugins/arm/v7/opdefs/sub_A88221.d b/plugins/arm/v7/opdefs/sub_A88221.d
index 2bfb767..71eb2fe 100644
--- a/plugins/arm/v7/opdefs/sub_A88221.d
+++ b/plugins/arm/v7/opdefs/sub_A88221.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 581
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 582
+
 		@conv {
 
 			reg_D = Register(Rdn)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 583
+
 		@assert {
 
 			S == 0
@@ -97,6 +103,8 @@
 
 	@syntax {
 
+		@subid 584
+
 		@assert {
 
 			S == 1
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 585
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sub_A88222.d b/plugins/arm/v7/opdefs/sub_A88222.d
index af4a29f..9dcc50b 100644
--- a/plugins/arm/v7/opdefs/sub_A88222.d
+++ b/plugins/arm/v7/opdefs/sub_A88222.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 586
+
 		@assert {
 
 			S == 0
@@ -63,6 +65,8 @@
 
 	@syntax {
 
+		@subid 587
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sub_A88223.d b/plugins/arm/v7/opdefs/sub_A88223.d
index a3b263a..b993951 100644
--- a/plugins/arm/v7/opdefs/sub_A88223.d
+++ b/plugins/arm/v7/opdefs/sub_A88223.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 588
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 589
+
 		@assert {
 
 			S == 0
@@ -78,6 +82,8 @@
 
 	@syntax {
 
+		@subid 590
+
 		@assert {
 
 			S == 1
@@ -105,6 +111,8 @@
 
 	@syntax {
 
+		@subid 591
+
 		@assert {
 
 			S == 0
@@ -132,6 +140,8 @@
 
 	@syntax {
 
+		@subid 592
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sub_A88224.d b/plugins/arm/v7/opdefs/sub_A88224.d
index 3e8c5be..817d1a4 100644
--- a/plugins/arm/v7/opdefs/sub_A88224.d
+++ b/plugins/arm/v7/opdefs/sub_A88224.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 593
+
 		@assert {
 
 			S == 0
@@ -66,6 +68,8 @@
 
 	@syntax {
 
+		@subid 594
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sub_A88225.d b/plugins/arm/v7/opdefs/sub_A88225.d
index fcce934..bb44a8e 100644
--- a/plugins/arm/v7/opdefs/sub_A88225.d
+++ b/plugins/arm/v7/opdefs/sub_A88225.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 595
+
 		@conv {
 
 			reg_D = Register(13)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 596
+
 		@assert {
 
 			S == 0
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 597
+
 		@assert {
 
 			S == 1
@@ -103,6 +109,8 @@
 
 	@syntax {
 
+		@subid 598
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -123,6 +131,8 @@
 
 	@syntax {
 
+		@subid 599
+
 		@assert {
 
 			S == 0
@@ -149,6 +159,8 @@
 
 	@syntax {
 
+		@subid 600
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/sub_A88226.d b/plugins/arm/v7/opdefs/sub_A88226.d
index 0ab17c4..d4e4eff 100644
--- a/plugins/arm/v7/opdefs/sub_A88226.d
+++ b/plugins/arm/v7/opdefs/sub_A88226.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 601
+
 		@assert {
 
 			S == 0
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 602
+
 		@assert {
 
 			S == 1
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 603
+
 		@assert {
 
 			S == 0
@@ -112,6 +118,8 @@
 
 	@syntax {
 
+		@subid 604
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/svc_A88228.d b/plugins/arm/v7/opdefs/svc_A88228.d
index 5130b7f..4df804f 100644
--- a/plugins/arm/v7/opdefs/svc_A88228.d
+++ b/plugins/arm/v7/opdefs/svc_A88228.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 605
+
 		@conv {
 
 			imm32 = ZeroExtend(imm8, 32)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 606
+
 		@conv {
 
 			imm32 = ZeroExtend(imm24, 32)
diff --git a/plugins/arm/v7/opdefs/swp_A88229.d b/plugins/arm/v7/opdefs/swp_A88229.d
index 187bb3d..cae58ca 100644
--- a/plugins/arm/v7/opdefs/swp_A88229.d
+++ b/plugins/arm/v7/opdefs/swp_A88229.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 607
+
 		@assert {
 
 			B == 0
@@ -64,6 +66,8 @@
 
 	@syntax {
 
+		@subid 608
+
 		@assert {
 
 			B == 1
diff --git a/plugins/arm/v7/opdefs/sxtab16_A88231.d b/plugins/arm/v7/opdefs/sxtab16_A88231.d
index a608cf8..a690a1e 100644
--- a/plugins/arm/v7/opdefs/sxtab16_A88231.d
+++ b/plugins/arm/v7/opdefs/sxtab16_A88231.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 611
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 612
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sxtab_A88230.d b/plugins/arm/v7/opdefs/sxtab_A88230.d
index 945b224..b897af5 100644
--- a/plugins/arm/v7/opdefs/sxtab_A88230.d
+++ b/plugins/arm/v7/opdefs/sxtab_A88230.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 609
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 610
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sxtah_A88232.d b/plugins/arm/v7/opdefs/sxtah_A88232.d
index b832844..b3b77d0 100644
--- a/plugins/arm/v7/opdefs/sxtah_A88232.d
+++ b/plugins/arm/v7/opdefs/sxtah_A88232.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 613
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 614
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sxtb16_A88234.d b/plugins/arm/v7/opdefs/sxtb16_A88234.d
index 2946915..a1aa0dd 100644
--- a/plugins/arm/v7/opdefs/sxtb16_A88234.d
+++ b/plugins/arm/v7/opdefs/sxtb16_A88234.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 618
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 619
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sxtb_A88233.d b/plugins/arm/v7/opdefs/sxtb_A88233.d
index ccfcfd1..fb07b8a 100644
--- a/plugins/arm/v7/opdefs/sxtb_A88233.d
+++ b/plugins/arm/v7/opdefs/sxtb_A88233.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 615
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 616
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 617
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/sxth_A88235.d b/plugins/arm/v7/opdefs/sxth_A88235.d
index 9063a9e..a5e4b59 100644
--- a/plugins/arm/v7/opdefs/sxth_A88235.d
+++ b/plugins/arm/v7/opdefs/sxth_A88235.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 620
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 621
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 622
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/teq_A88237.d b/plugins/arm/v7/opdefs/teq_A88237.d
index ea7f122..f729083 100644
--- a/plugins/arm/v7/opdefs/teq_A88237.d
+++ b/plugins/arm/v7/opdefs/teq_A88237.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 623
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 624
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/teq_A88238.d b/plugins/arm/v7/opdefs/teq_A88238.d
index 6133506..4710ad7 100644
--- a/plugins/arm/v7/opdefs/teq_A88238.d
+++ b/plugins/arm/v7/opdefs/teq_A88238.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 625
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 626
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/teq_A88239.d b/plugins/arm/v7/opdefs/teq_A88239.d
index 33d54c6..ea2cd68 100644
--- a/plugins/arm/v7/opdefs/teq_A88239.d
+++ b/plugins/arm/v7/opdefs/teq_A88239.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 627
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/tst_A88240.d b/plugins/arm/v7/opdefs/tst_A88240.d
index 119d53a..c390262 100644
--- a/plugins/arm/v7/opdefs/tst_A88240.d
+++ b/plugins/arm/v7/opdefs/tst_A88240.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 628
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 629
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/tst_A88241.d b/plugins/arm/v7/opdefs/tst_A88241.d
index b6c1e71..e65fea9 100644
--- a/plugins/arm/v7/opdefs/tst_A88241.d
+++ b/plugins/arm/v7/opdefs/tst_A88241.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 630
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -56,6 +58,8 @@
 
 	@syntax {
 
+		@subid 631
+
 		@conv {
 
 			reg_N = Register(Rn)
@@ -76,6 +80,8 @@
 
 	@syntax {
 
+		@subid 632
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/tst_A88242.d b/plugins/arm/v7/opdefs/tst_A88242.d
index 3ebf379..279c92e 100644
--- a/plugins/arm/v7/opdefs/tst_A88242.d
+++ b/plugins/arm/v7/opdefs/tst_A88242.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 633
+
 		@conv {
 
 			reg_N = Register(Rn)
diff --git a/plugins/arm/v7/opdefs/uadd16_A88243.d b/plugins/arm/v7/opdefs/uadd16_A88243.d
index 9697c9a..d99ee90 100644
--- a/plugins/arm/v7/opdefs/uadd16_A88243.d
+++ b/plugins/arm/v7/opdefs/uadd16_A88243.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 634
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 635
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uadd8_A88244.d b/plugins/arm/v7/opdefs/uadd8_A88244.d
index f9080dc..799c831 100644
--- a/plugins/arm/v7/opdefs/uadd8_A88244.d
+++ b/plugins/arm/v7/opdefs/uadd8_A88244.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 636
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 637
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uasx_A88245.d b/plugins/arm/v7/opdefs/uasx_A88245.d
index 5c2b682..14ca465 100644
--- a/plugins/arm/v7/opdefs/uasx_A88245.d
+++ b/plugins/arm/v7/opdefs/uasx_A88245.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 638
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 639
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/ubfx_A88246.d b/plugins/arm/v7/opdefs/ubfx_A88246.d
index 2107f5c..732f594 100644
--- a/plugins/arm/v7/opdefs/ubfx_A88246.d
+++ b/plugins/arm/v7/opdefs/ubfx_A88246.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 640
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -59,6 +61,8 @@
 
 	@syntax {
 
+		@subid 641
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/udf_A88247.d b/plugins/arm/v7/opdefs/udf_A88247.d
index 82e04f8..db26083 100644
--- a/plugins/arm/v7/opdefs/udf_A88247.d
+++ b/plugins/arm/v7/opdefs/udf_A88247.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 642
+
 		@conv {
 
 			imm32 = ZeroExtend(imm8, 32)
@@ -55,6 +57,8 @@
 
 	@syntax {
 
+		@subid 643
+
 		@conv {
 
 			imm32 = ZeroExtend(imm4:imm12, 32)
@@ -73,6 +77,8 @@
 
 	@syntax {
 
+		@subid 644
+
 		@conv {
 
 			imm32 = ZeroExtend(imm12:imm4, 32)
diff --git a/plugins/arm/v7/opdefs/udiv_A88248.d b/plugins/arm/v7/opdefs/udiv_A88248.d
index c5684ae..4504985 100644
--- a/plugins/arm/v7/opdefs/udiv_A88248.d
+++ b/plugins/arm/v7/opdefs/udiv_A88248.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 645
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 646
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhadd16_A88249.d b/plugins/arm/v7/opdefs/uhadd16_A88249.d
index b67ac38..65f7bd8 100644
--- a/plugins/arm/v7/opdefs/uhadd16_A88249.d
+++ b/plugins/arm/v7/opdefs/uhadd16_A88249.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 647
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 648
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhadd8_A88250.d b/plugins/arm/v7/opdefs/uhadd8_A88250.d
index 63e34a4..0964304 100644
--- a/plugins/arm/v7/opdefs/uhadd8_A88250.d
+++ b/plugins/arm/v7/opdefs/uhadd8_A88250.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 649
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 650
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhasx_A88251.d b/plugins/arm/v7/opdefs/uhasx_A88251.d
index 2d209f9..2a624bc 100644
--- a/plugins/arm/v7/opdefs/uhasx_A88251.d
+++ b/plugins/arm/v7/opdefs/uhasx_A88251.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 651
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 652
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhsax_A88252.d b/plugins/arm/v7/opdefs/uhsax_A88252.d
index 36bb86b..a90963e 100644
--- a/plugins/arm/v7/opdefs/uhsax_A88252.d
+++ b/plugins/arm/v7/opdefs/uhsax_A88252.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 653
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 654
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhsub16_A88253.d b/plugins/arm/v7/opdefs/uhsub16_A88253.d
index 5a071e2..3dd4316 100644
--- a/plugins/arm/v7/opdefs/uhsub16_A88253.d
+++ b/plugins/arm/v7/opdefs/uhsub16_A88253.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 655
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 656
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uhsub8_A88254.d b/plugins/arm/v7/opdefs/uhsub8_A88254.d
index d323ae5..a47622b 100644
--- a/plugins/arm/v7/opdefs/uhsub8_A88254.d
+++ b/plugins/arm/v7/opdefs/uhsub8_A88254.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 657
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 658
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/umaal_A88255.d b/plugins/arm/v7/opdefs/umaal_A88255.d
index 4cbc624..21cd572 100644
--- a/plugins/arm/v7/opdefs/umaal_A88255.d
+++ b/plugins/arm/v7/opdefs/umaal_A88255.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 659
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 660
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
diff --git a/plugins/arm/v7/opdefs/umlal_A88256.d b/plugins/arm/v7/opdefs/umlal_A88256.d
index 345c321..5b3c98d 100644
--- a/plugins/arm/v7/opdefs/umlal_A88256.d
+++ b/plugins/arm/v7/opdefs/umlal_A88256.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 661
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 662
+
 		@assert {
 
 			S == 0
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 663
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/umull_A88257.d b/plugins/arm/v7/opdefs/umull_A88257.d
index d3c7736..30bc0d2 100644
--- a/plugins/arm/v7/opdefs/umull_A88257.d
+++ b/plugins/arm/v7/opdefs/umull_A88257.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 664
+
 		@conv {
 
 			reg_DLO = Register(RdLo)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 665
+
 		@assert {
 
 			S == 0
@@ -85,6 +89,8 @@
 
 	@syntax {
 
+		@subid 666
+
 		@assert {
 
 			S == 1
diff --git a/plugins/arm/v7/opdefs/uqadd16_A88258.d b/plugins/arm/v7/opdefs/uqadd16_A88258.d
index f7ce5ed..0badd71 100644
--- a/plugins/arm/v7/opdefs/uqadd16_A88258.d
+++ b/plugins/arm/v7/opdefs/uqadd16_A88258.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 667
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 668
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uqadd8_A88259.d b/plugins/arm/v7/opdefs/uqadd8_A88259.d
index 57c910e..a91ed2a 100644
--- a/plugins/arm/v7/opdefs/uqadd8_A88259.d
+++ b/plugins/arm/v7/opdefs/uqadd8_A88259.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 669
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 670
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uqasx_A88260.d b/plugins/arm/v7/opdefs/uqasx_A88260.d
index 3b1c84f..6876ea3 100644
--- a/plugins/arm/v7/opdefs/uqasx_A88260.d
+++ b/plugins/arm/v7/opdefs/uqasx_A88260.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 671
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 672
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uqsax_A88261.d b/plugins/arm/v7/opdefs/uqsax_A88261.d
index 7ff9199..a0e6f56 100644
--- a/plugins/arm/v7/opdefs/uqsax_A88261.d
+++ b/plugins/arm/v7/opdefs/uqsax_A88261.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 673
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 674
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uqsub16_A88262.d b/plugins/arm/v7/opdefs/uqsub16_A88262.d
index 91baf9a..abbf88d 100644
--- a/plugins/arm/v7/opdefs/uqsub16_A88262.d
+++ b/plugins/arm/v7/opdefs/uqsub16_A88262.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 675
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 676
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uqsub8_A88263.d b/plugins/arm/v7/opdefs/uqsub8_A88263.d
index 5e53068..7339ed6 100644
--- a/plugins/arm/v7/opdefs/uqsub8_A88263.d
+++ b/plugins/arm/v7/opdefs/uqsub8_A88263.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 677
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 678
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usad8_A88264.d b/plugins/arm/v7/opdefs/usad8_A88264.d
index 07cedd3..8a52d62 100644
--- a/plugins/arm/v7/opdefs/usad8_A88264.d
+++ b/plugins/arm/v7/opdefs/usad8_A88264.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 679
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 680
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usada8_A88265.d b/plugins/arm/v7/opdefs/usada8_A88265.d
index 0a937eb..115f353 100644
--- a/plugins/arm/v7/opdefs/usada8_A88265.d
+++ b/plugins/arm/v7/opdefs/usada8_A88265.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 681
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 682
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usat16_A88267.d b/plugins/arm/v7/opdefs/usat16_A88267.d
index 578090a..e67b940 100644
--- a/plugins/arm/v7/opdefs/usat16_A88267.d
+++ b/plugins/arm/v7/opdefs/usat16_A88267.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 685
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 686
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usat_A88266.d b/plugins/arm/v7/opdefs/usat_A88266.d
index 88e5be3..d7bbd9f 100644
--- a/plugins/arm/v7/opdefs/usat_A88266.d
+++ b/plugins/arm/v7/opdefs/usat_A88266.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 683
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 684
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usax_A88268.d b/plugins/arm/v7/opdefs/usax_A88268.d
index 4ff0cc2..009122e 100644
--- a/plugins/arm/v7/opdefs/usax_A88268.d
+++ b/plugins/arm/v7/opdefs/usax_A88268.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 687
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 688
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usub16_A88269.d b/plugins/arm/v7/opdefs/usub16_A88269.d
index 2189fa3..0bdc84c 100644
--- a/plugins/arm/v7/opdefs/usub16_A88269.d
+++ b/plugins/arm/v7/opdefs/usub16_A88269.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 689
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 690
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/usub8_A88270.d b/plugins/arm/v7/opdefs/usub8_A88270.d
index 6fc555d..d102cf1 100644
--- a/plugins/arm/v7/opdefs/usub8_A88270.d
+++ b/plugins/arm/v7/opdefs/usub8_A88270.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 691
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 692
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxtab16_A88272.d b/plugins/arm/v7/opdefs/uxtab16_A88272.d
index b9b430d..1a996c4 100644
--- a/plugins/arm/v7/opdefs/uxtab16_A88272.d
+++ b/plugins/arm/v7/opdefs/uxtab16_A88272.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 695
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 696
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxtab_A88271.d b/plugins/arm/v7/opdefs/uxtab_A88271.d
index 0490b28..33001b0 100644
--- a/plugins/arm/v7/opdefs/uxtab_A88271.d
+++ b/plugins/arm/v7/opdefs/uxtab_A88271.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 693
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 694
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxtah_A88273.d b/plugins/arm/v7/opdefs/uxtah_A88273.d
index 5855519..8411da9 100644
--- a/plugins/arm/v7/opdefs/uxtah_A88273.d
+++ b/plugins/arm/v7/opdefs/uxtah_A88273.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 697
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -58,6 +60,8 @@
 
 	@syntax {
 
+		@subid 698
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxtb16_A88275.d b/plugins/arm/v7/opdefs/uxtb16_A88275.d
index 7f696ac..5efa180 100644
--- a/plugins/arm/v7/opdefs/uxtb16_A88275.d
+++ b/plugins/arm/v7/opdefs/uxtb16_A88275.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 702
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 703
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxtb_A88274.d b/plugins/arm/v7/opdefs/uxtb_A88274.d
index 18994f7..36bba8a 100644
--- a/plugins/arm/v7/opdefs/uxtb_A88274.d
+++ b/plugins/arm/v7/opdefs/uxtb_A88274.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 699
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 700
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 701
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/uxth_A88276.d b/plugins/arm/v7/opdefs/uxth_A88276.d
index 4017a26..82b9fa0 100644
--- a/plugins/arm/v7/opdefs/uxth_A88276.d
+++ b/plugins/arm/v7/opdefs/uxth_A88276.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 704
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -57,6 +59,8 @@
 
 	@syntax {
 
+		@subid 705
+
 		@conv {
 
 			reg_D = Register(Rd)
@@ -77,6 +81,8 @@
 
 	@syntax {
 
+		@subid 706
+
 		@conv {
 
 			reg_D = Register(Rd)
diff --git a/plugins/arm/v7/opdefs/wfe_A88424.d b/plugins/arm/v7/opdefs/wfe_A88424.d
index 27c9386..0ef7b43 100644
--- a/plugins/arm/v7/opdefs/wfe_A88424.d
+++ b/plugins/arm/v7/opdefs/wfe_A88424.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 707
+
 		@asm wfe
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 708
+
 		@asm wfe.w
 
 	}
@@ -61,6 +65,8 @@
 
 	@syntax {
 
+		@subid 709
+
 		@asm wfe
 
 		@rules {
diff --git a/plugins/arm/v7/opdefs/wfi_A88425.d b/plugins/arm/v7/opdefs/wfi_A88425.d
index 0f73c23..21553e1 100644
--- a/plugins/arm/v7/opdefs/wfi_A88425.d
+++ b/plugins/arm/v7/opdefs/wfi_A88425.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 710
+
 		@asm wfi
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 711
+
 		@asm wfi.w
 
 	}
@@ -61,6 +65,8 @@
 
 	@syntax {
 
+		@subid 712
+
 		@asm wfi
 
 		@rules {
diff --git a/plugins/arm/v7/opdefs/yield_A88426.d b/plugins/arm/v7/opdefs/yield_A88426.d
index 5d594c2..7e67636 100644
--- a/plugins/arm/v7/opdefs/yield_A88426.d
+++ b/plugins/arm/v7/opdefs/yield_A88426.d
@@ -37,6 +37,8 @@
 
 	@syntax {
 
+		@subid 713
+
 		@asm yield
 
 	}
@@ -49,6 +51,8 @@
 
 	@syntax {
 
+		@subid 714
+
 		@asm yield.w
 
 	}
@@ -61,6 +65,8 @@
 
 	@syntax {
 
+		@subid 715
+
 		@asm yield
 
 		@rules {
diff --git a/plugins/dalvik/v35/instruction.c b/plugins/dalvik/v35/instruction.c
index 437cae8..1966690 100644
--- a/plugins/dalvik/v35/instruction.c
+++ b/plugins/dalvik/v35/instruction.c
@@ -28,6 +28,7 @@
 
 
 #include "opcodes/descriptions.h"
+#include "opcodes/hooks.h"
 #include "opcodes/keywords.h"
 #include "../instruction-int.h"
 
@@ -66,6 +67,9 @@ static const char *g_dalvik35_instruction_get_encoding(const GDalvik35Instructio
 /* Fournit le nom humain de l'instruction manipulée. */
 static const char *g_dalvik35_instruction_get_keyword(const GDalvik35Instruction *, AsmSyntax);
 
+/* Complète un désassemblage accompli pour une instruction. */
+static void g_dalvik35_instruction_call_hook(GDalvik35Instruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
+
 /* Fournit une description pour l'instruction manipulée. */
 static const char *g_dalvik35_instruction_get_description(const GDalvik35Instruction *);
 
@@ -101,6 +105,7 @@ static void g_dalvik35_instruction_class_init(GDalvik35InstructionClass *klass)
 
     instr->get_encoding = (get_instruction_encoding_fc)g_dalvik35_instruction_get_encoding;
     instr->get_keyword = (get_instruction_keyword_fc)g_dalvik35_instruction_get_keyword;
+    instr->call_hook = (call_instruction_hook_fc)g_dalvik35_instruction_call_hook;
     instr->get_desc = (get_instruction_desc_fc)g_dalvik35_instruction_get_description;
 
 }
@@ -164,7 +169,7 @@ static void g_dalvik35_instruction_finalize(GDalvik35Instruction *instr)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : keyword = définition du nom humaine de l'instruction.        *
+*  Paramètres  : uid = identifiant unique attribué à l'instruction.           *
 *                                                                             *
 *  Description : Crée une instruction pour l'architecture Dalvik v35.         *
 *                                                                             *
@@ -176,13 +181,13 @@ static void g_dalvik35_instruction_finalize(GDalvik35Instruction *instr)
 
 GArchInstruction *g_dalvik35_instruction_new(itid_t uid)
 {
-    GArchInstruction *result;               /* Structure à retourner       */
+    GDalvik35Instruction *result;           /* Structure à retourner       */
 
     result = g_object_new(G_TYPE_DALVIK35_INSTRUCTION, NULL);
 
     G_ARCH_INSTRUCTION(result)->uid = uid;
 
-    return result;
+    return G_ARCH_INSTRUCTION(result);
 
 }
 
@@ -241,6 +246,44 @@ static const char *g_dalvik35_instruction_get_keyword(const GDalvik35Instruction
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : instr   = instruction quelconque à traiter.                  *
+*                type    = type de procédure à utiliser.                      *
+*                proc    = représentation de l'architecture utilisée.         *
+*                context = contexte associé à la phase de désassemblage.      *
+*                format  = accès aux données du binaire d'origine.            *
+*                                                                             *
+*  Description : Complète un désassemblage accompli pour une instruction.     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_dalvik35_instruction_call_hook(GDalvik35Instruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GExeFormat *format)
+{
+    GArchInstruction *base;                 /* Version de base d'instance  */
+    itid_t uid;                             /* Accès simplifié             */
+    instr_hook_fc hook;                     /* Décrochage à appeler        */
+
+    assert(type < IPH_COUNT);
+
+    base = G_ARCH_INSTRUCTION(instr);
+
+    uid = base->uid;
+
+    assert(uid < DOP35_COUNT);
+
+    hook = _dalvik35_hooks[uid][type];
+
+    if (hook != NULL)
+        hook(base, proc, context, format);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : instr = instruction d'assemblage à consulter.                *
 *                                                                             *
 *  Description : Fournit une description pour l'instruction manipulée.        *
diff --git a/plugins/dalvik/v35/opdefs/Makefile.am b/plugins/dalvik/v35/opdefs/Makefile.am
index f660e3d..0684c53 100644
--- a/plugins/dalvik/v35/opdefs/Makefile.am
+++ b/plugins/dalvik/v35/opdefs/Makefile.am
@@ -26,12 +26,10 @@ D2C_SPECIFIC = --op-prefix=DALVIK_OPT_
 FIXED_C_INCLUDES = 						\
 	\#include <stdint.h>				\
 	\n									\
+	\n\#include "identifiers.h"			\
 	\n\#include "../instruction.h"		\
 	\n\#include "../operand.h"			\
-	\n\#include "../../fetch.h"			\
-	\n\#include "../../helpers.h"		\
-	\n\#include "../../link.h"			\
-	\n\#include "../../post.h"
+	\n\#include "../../helpers.h"
 
 FIXED_H_INCLUDES = 						\
 	\#include <stdint.h>				\
@@ -42,6 +40,11 @@ FIXED_H_INCLUDES = 						\
 	\n									\
 	\n\#include "../processor.h"
 
+FIXED_H_HOOKS_INCLUDES = 				\
+	\#include "../../fetch.h"			\
+	\n\#include "../../link.h"			\
+	\n\#include "../../post.h"
+
 
 # for (( i = 0; i < 256; i++)); do def=$(ls `printf "*_%02x.d" $i` 2> /dev/null); test -z "$def" || echo -e "\t$def\t\t\t\t\t\t\t\\" ; done
 DALVIK_DEFS = 							\
diff --git a/src/arch/instruction-int.h b/src/arch/instruction-int.h
index c0ae3a7..2adeed0 100644
--- a/src/arch/instruction-int.h
+++ b/src/arch/instruction-int.h
@@ -37,6 +37,9 @@ typedef const char * (* get_instruction_encoding_fc) (const GArchInstruction *);
 /* Fournit le nom humain de l'instruction manipulée. */
 typedef const char * (* get_instruction_keyword_fc) (GArchInstruction *, AsmSyntax );
 
+/* Complète un désassemblage accompli pour une instruction. */
+typedef void (* call_instruction_hook_fc) (GArchInstruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
+
 /* Construit un petit résumé concis de l'instruction. */
 typedef char * (* build_instruction_tooltip_fc) (const GArchInstruction *);
 
@@ -99,6 +102,7 @@ struct _GArchInstructionClass
 
     get_instruction_encoding_fc get_encoding; /* Obtention de l'encodage   */
     get_instruction_keyword_fc get_keyword; /* Texte humain équivalent     */
+    call_instruction_hook_fc call_hook;     /* Décrochages éventuels       */
     build_instruction_tooltip_fc build_tooltip; /* Construction d'une bulle*/
     get_instruction_desc_fc get_desc;       /* Description assez complète  */
 
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 962b0e8..be7ff37 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -34,16 +34,6 @@
 
 
 
-/* Accès aux décrochages */
-static const char *_hook_names[IPH_COUNT] = {
-
-    [IPH_FETCH] = "IPH_FETCH",
-    [IPH_LINK] = "IPH_LINK",
-    [IPH_POST] = "IPH_POST"
-
-};
-
-
 /* Initialise la classe générique des instructions. */
 static void g_arch_instruction_class_init(GArchInstructionClass *);
 
@@ -287,30 +277,6 @@ ArchInstrFlag g_arch_instruction_get_flags(const GArchInstruction *instr)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : instr = instruction quelconque à modifier.                   *
-*                type  = type de procédure à mémoriser.                       *
-*                hook  = fonction à appeler sur commande.                     *
-*                                                                             *
-*  Description : Définit un traitement complémentare au désassemblage.        *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void g_arch_instruction_set_hooks(GArchInstruction *instr, const instr_hook_fc hooks[IPH_COUNT])
-{
-    InstrProcessHook i;                     /* Boucle de parcours          */
-
-    for (i = 0; i < IPH_COUNT; i++)
-        g_object_set_data(G_OBJECT(instr), _hook_names[i], hooks[i]);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
 *  Paramètres  : instr   = instruction quelconque à traiter.                  *
 *                type    = type de procédure à utiliser.                      *
 *                proc    = représentation de l'architecture utilisée.         *
@@ -327,23 +293,12 @@ void g_arch_instruction_set_hooks(GArchInstruction *instr, const instr_hook_fc h
 
 void g_arch_instruction_call_hook(GArchInstruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GExeFormat *format)
 {
-    instr_hook_fc hook;
-
-    assert(type < IPH_COUNT);
-
-    hook = g_object_get_data(G_OBJECT(instr), _hook_names[type]);
-
-    if (hook != NULL)
-    {
-        /**
-         * Comme ce genre d'appel n'est effectué normalement qu'une seule fois
-         * par instruction, on libère la mémoire au moment de cet unique appel.
-         */
-        g_object_set_data(G_OBJECT(instr), _hook_names[type], NULL);
+    GArchInstructionClass *class;           /* Classe des instructions     */
 
-        hook(instr, proc, context, format);
+    class = G_ARCH_INSTRUCTION_GET_CLASS(instr);
 
-    }
+    if (class->call_hook != NULL)
+        class->call_hook(instr, type, proc, context, format);
 
 }
 
diff --git a/src/arch/instruction.h b/src/arch/instruction.h
index e0c8fdc..497b7f6 100644
--- a/src/arch/instruction.h
+++ b/src/arch/instruction.h
@@ -108,9 +108,6 @@ typedef struct _GArchProcessor GArchProcessor;
 /* Complète un désassemblage accompli pour une instruction. */
 typedef void (* instr_hook_fc) (GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *);
 
-/* Définit un traitement complémentare au désassemblage. */
-void g_arch_instruction_set_hooks(GArchInstruction *, const instr_hook_fc [IPH_COUNT]);
-
 /* Complète un désassemblage accompli pour une instruction. */
 void g_arch_instruction_call_hook(GArchInstruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
 
diff --git a/tools/d2c/coder.c b/tools/d2c/coder.c
index 9977d22..eff35c2 100644
--- a/tools/d2c/coder.c
+++ b/tools/d2c/coder.c
@@ -116,9 +116,15 @@ static bool output_coder_format(const rented_coder *, const output_info *, const
 /* Initialise le contenu utile du fichier des identifiants. */
 static void init_coder_identifiers_file(int, const output_info *);
 
+/* Initialise le contenu utile du fichier des sous-identifiants. */
+static void init_coder_sub_identifiers_file(int, const output_info *);
+
 /* Initialise le contenu utile du fichier des mots clefs. */
 static void init_coder_keywords_file(int, const output_info *);
 
+/* Initialise le contenu utile du fichier des décrochages. */
+static void init_coder_hooks_file(int, const output_info *);
+
 /* Initialise le contenu utile du fichier des descriptions. */
 static void init_coder_descriptions_file(int, const output_info *);
 
@@ -1044,6 +1050,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
                     break;
 
                 case IOT_FORMAT:
+                    assert(j == 0);
                     assert(enc_name->dest == NULL);
                     result = output_coder_format(coder, info, enc_name, coder->specs[j], header_fd, code_fd);
                     break;
@@ -1146,6 +1153,7 @@ static bool output_coder_raw(const rented_coder *coder, const output_info *info,
     coding_bits *bits;                      /* Gestionnaire de bits        */
     unsigned int wide;                      /* Taille des mots             */
     size_t maxlen;                          /* Taille à compléter          */
+    char *fullname;                         /* Désignation complète        */
 
     arch = strdup(info->arch_cn);
     make_string_lower(arch);
@@ -1214,7 +1222,13 @@ static bool output_coder_raw(const rented_coder *coder, const output_info *info,
     dprintf(cfd, "{");
     dprintf(cfd, "\n");
 
-    result = write_encoding_spec_raw_disass(encoding, cfd, arch, coder->id, coder->pp);
+    make_string_upper(name);
+
+    asprintf(&fullname, "%s_%s", info->id_prefix, name);
+
+    result = write_encoding_spec_raw_disass(encoding, cfd, arch, fullname, coder->pp);
+
+    free(fullname);
 
     dprintf(cfd, "}\n");
     dprintf(cfd, "\n");
@@ -1397,6 +1411,7 @@ static bool output_coder_format(const rented_coder *coder, const output_info *in
     char *arch;                             /* Architecture à traiter      */
     char *name;                             /* Désignation à manipuler     */
     size_t maxlen;                          /* Taille à compléter          */
+    char *fullname;                         /* Désignation complète        */
 
     arch = strdup(info->arch_cn);
     make_string_lower(arch);
@@ -1457,7 +1472,13 @@ static bool output_coder_format(const rented_coder *coder, const output_info *in
     dprintf(cfd, "{");
     dprintf(cfd, "\n");
 
-    result = write_encoding_spec_format_disass(encoding, cfd, arch, coder->id, info->fmt_prefix);
+    make_string_upper(name);
+
+    asprintf(&fullname, "%s_%s", info->id_prefix, name);
+
+    result = write_encoding_spec_format_disass(encoding, cfd, arch, fullname, info->fmt_prefix);
+
+    free(fullname);
 
     dprintf(cfd, "}\n");
     dprintf(cfd, "\n");
@@ -1679,6 +1700,142 @@ bool fini_coder_identifiers_file(const char *pathname, const output_info *info)
 *  Paramètres  : fd   = flux ouvert en écriture mis à disposition.            *
 *                info = précisions quant à la génération.                     *
 *                                                                             *
+*  Description : Initialise le contenu utile du fichier des sous-identifiants.*
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void init_coder_sub_identifiers_file(int fd, const output_info *info)
+{
+    dprintf(fd, "#ifndef _%s_SUBIDENTIFIERS_H\n", info->guard);
+    dprintf(fd, "#define _%s_SUBIDENTIFIERS_H\n", info->guard);
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    dprintf(fd, "/* Enumération de tous les opcodes */\n");
+    dprintf(fd, "typedef enum _%sSyntax\n", info->arch_cn);
+    dprintf(fd, "{\n");
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : coder = gestion par la machine en remplacement de l'humain.  *
+*                info  = précisions quant à la génération.                    *
+*                                                                             *
+*  Description : Génère ou complète un fichier créant les sous-identifiants.  *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool output_coder_sub_identifier(const rented_coder *coder, const output_info *info)
+{
+    bool result;                            /* Bilan à retourner           */
+    bool created;                           /* Note une création           */
+    int fd;                                 /* Flux ouvert en écriture     */
+    char *name;                             /* Désignation à manipuler     */
+    char *fullname;                         /* Désignation complète        */
+    size_t i;                               /* Boucle de parcours          */
+
+    result = false;
+
+    /* Ouverture de la destination */
+
+    fd = open_global_header_file(coder, info, "subidentifiers", &created);
+    if (fd == -1) goto ocsi_exit;
+
+    if (created)
+    {
+        write_header_file_license(fd, info, "subidentifiers", "définition des sous-identifiants uniques pour");
+        init_coder_sub_identifiers_file(fd, info);
+    }
+
+    /* Impression des sous-identifiants */
+
+    name = get_coder_code_name(coder);
+    make_string_upper(name);
+
+    asprintf(&fullname, "%s_%s", info->id_prefix, name);
+
+    free(name);
+
+    result = true;
+
+    for (i = 0; i < coder->specs_count && result; i++)
+        result = write_encoding_spec_subid(coder->specs[i], fd, fullname);
+
+    free(fullname);
+
+    result = true;
+
+ ocsi_exit:
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : pathname = chemin d'accès au fichier à traiter.              *
+*                info     = précisions quant à la génération.                 *
+*                                                                             *
+*  Description : Finalise le contenu utile du fichier des sous-identifiants.  *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool fini_coder_sub_identifiers_file(const char *pathname, const output_info *info)
+{
+    bool result;                            /* Bilan à retourner           */
+    int fd;                                 /* Flux ouvert en écriture     */
+
+    result = false;
+
+    fd = open(pathname, O_WRONLY | O_APPEND, 0644);
+    if (fd == -1)
+    {
+        perror("open()");
+        goto fcif_exit;
+    }
+
+    dprintf(fd, "\n");
+    dprintf(fd, "    %s_ENC_COUNT\n", info->id_prefix);
+    dprintf(fd, "\n");
+
+    dprintf(fd, "} %sSyntax;\n", info->arch_cn);
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    dprintf(fd, "#endif  /* _%s_SUBIDENTIFIERS_H */\n", info->guard);
+
+    result = true;
+
+ fcif_exit:
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : fd   = flux ouvert en écriture mis à disposition.            *
+*                info = précisions quant à la génération.                     *
+*                                                                             *
 *  Description : Initialise le contenu utile du fichier des mots clefs.       *
 *                                                                             *
 *  Retour      : -                                                            *
@@ -1696,7 +1853,23 @@ static void init_coder_keywords_file(int fd, const output_info *info)
 
     dprintf(fd, "\n");
     dprintf(fd, "\n");
-    dprintf(fd, "#include \"identifiers.h\"\n");
+
+    switch (info->type)
+    {
+        case IOT_UNDEFINED:
+            assert(false);
+            break;
+
+        case IOT_RAW:
+            dprintf(fd, "#include \"subidentifiers.h\"\n");
+            break;
+
+        case IOT_FORMAT:
+            dprintf(fd, "#include \"identifiers.h\"\n");
+            break;
+
+    }
+
     dprintf(fd, "\n");
     dprintf(fd, "\n");
     dprintf(fd, "\n");
@@ -1705,7 +1878,8 @@ static void init_coder_keywords_file(int fd, const output_info *info)
     make_string_lower(larch);
 
     dprintf(fd, "/* Enumération de tous les mots clefs */\n");
-    dprintf(fd, "static char *_%s_keywords[%s_COUNT] = {\n", larch, info->id_prefix);
+    dprintf(fd, "static char *_%s_keywords[%s_%sCOUNT] = {\n",
+            larch, info->id_prefix, info->type == IOT_RAW ? "ENC_" : "");
     dprintf(fd, "\n");
 
     free(larch);
@@ -1732,6 +1906,8 @@ bool output_coder_keyword(const rented_coder *coder, const output_info *info)
     bool created;                           /* Note une création           */
     int fd;                                 /* Flux ouvert en écriture     */
     char *name;                             /* Désignation à manipuler     */
+    char *fullname;                         /* Désignation complète        */
+    size_t i;                               /* Boucle de parcours          */
 
     result = false;
 
@@ -1754,24 +1930,49 @@ bool output_coder_keyword(const rented_coder *coder, const output_info *info)
         init_coder_keywords_file(fd, info);
     }
 
-    /* Impression de la colonne */
+    /* Lancement des impressions */
 
     name = get_coder_code_name(coder);
     make_string_upper(name);
 
-    dprintf(fd, "\t[%s_%s] = ", info->id_prefix, name);
+    asprintf(&fullname, "%s_%s", info->id_prefix, name);
 
     free(name);
 
-    /* Impression du mot clef */
+    result = true;
 
-    name = get_coder_nominal_name(coder);
+    for (i = 0; i < coder->specs_count && result; i++)
+        switch (info->type)
+        {
+            case IOT_UNDEFINED:
+                assert(false);
+                result = false;
+                break;
 
-    dprintf(fd, "\"%s\",\n", name);
+            case IOT_RAW:
+                result = write_encoding_spec_keywords(coder->specs[i], fd, fullname);
+                break;
 
-    free(name);
+            case IOT_FORMAT:
+                assert(i == 0);
 
-    result = true;
+                /* Impression de la colonne */
+
+                dprintf(fd, "\t[%s] = ", fullname);
+
+                /* Impression du mot clef */
+
+                name = get_coder_nominal_name(coder);
+
+                dprintf(fd, "\"%s\",\n", name);
+
+                free(name);
+
+                break;
+
+        }
+
+    free(fullname);
 
  ock_exit:
 
@@ -1830,6 +2031,194 @@ bool fini_coder_keywords_file(const char *pathname, const output_info *info)
 *  Paramètres  : fd   = flux ouvert en écriture mis à disposition.            *
 *                info = précisions quant à la génération.                     *
 *                                                                             *
+*  Description : Initialise le contenu utile du fichier des décrochages.      *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void init_coder_hooks_file(int fd, const output_info *info)
+{
+    char *larch;                            /* Architecture en minuscules  */
+
+    dprintf(fd, "#ifndef _%s_HOOKS_H\n", info->guard);
+    dprintf(fd, "#define _%s_HOOKS_H\n", info->guard);
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    switch (info->type)
+    {
+        case IOT_UNDEFINED:
+            assert(false);
+            break;
+
+        case IOT_RAW:
+            dprintf(fd, "#include \"subidentifiers.h\"\n");
+            break;
+
+        case IOT_FORMAT:
+            dprintf(fd, "#include \"identifiers.h\"\n");
+            break;
+
+    }
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    dprintf(fd, "##INCLUDES##\n");
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    larch = strdup(info->arch_cn);
+    make_string_lower(larch);
+
+    dprintf(fd, "/* Définitions des décrochages pour l'établissement d'instructions */\n");
+    dprintf(fd, "static const instr_hook_fc _%s_hooks[%s_%sCOUNT][IPH_COUNT] = {\n",
+            larch, info->id_prefix, info->type == IOT_RAW ? "ENC_" : "");
+    dprintf(fd, "\n");
+
+    free(larch);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : coder = gestion par la machine en remplacement de l'humain.  *
+*                info  = précisions quant à la génération.                    *
+*                                                                             *
+*  Description : Génère ou complète un fichier constituant les décrochages.   *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool output_coder_hooks(const rented_coder *coder, const output_info *info)
+{
+    bool result;                            /* Bilan à retourner           */
+    bool created;                           /* Note une création           */
+    int fd;                                 /* Flux ouvert en écriture     */
+    char *name;                             /* Désignation à manipuler     */
+    char *fullname;                         /* Désignation complète        */
+    size_t i;                               /* Boucle de parcours          */
+
+    result = false;
+
+    /* S'il n'y a pas lieu de traiter l'instruction */
+
+    if (coder->useless)
+    {
+        result = true;
+        goto och_exit;
+    }
+
+    /* Ouverture de la destination */
+
+    fd = open_global_header_file(coder, info, "hooks", &created);
+    if (fd == -1) goto och_exit;
+
+    if (created)
+    {
+        write_header_file_license(fd, info, "hooks", "définition des décrochages pour instructions");
+        init_coder_hooks_file(fd, info);
+    }
+
+    /* Lancement des impressions */
+
+    name = get_coder_code_name(coder);
+    make_string_upper(name);
+
+    asprintf(&fullname, "%s_%s", info->id_prefix, name);
+
+    free(name);
+
+    result = true;
+
+    for (i = 0; i < coder->specs_count && result; i++)
+        switch (info->type)
+        {
+            case IOT_UNDEFINED:
+                assert(false);
+                result = false;
+                break;
+
+            case IOT_RAW:
+                result = write_encoding_spec_hooks(coder->specs[i], fd, fullname, true);
+                break;
+
+            case IOT_FORMAT:
+                assert(i == 0);
+                result = write_encoding_spec_hooks(coder->specs[i], fd, fullname, false);
+                break;
+
+        }
+
+    free(fullname);
+
+ och_exit:
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : pathname = chemin d'accès au fichier à traiter.              *
+*                info     = précisions quant à la génération.                 *
+*                                                                             *
+*  Description : Finalise le contenu utile du fichier des décrochages.        *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool fini_coder_hooks_file(const char *pathname, const output_info *info)
+{
+    bool result;                            /* Bilan à retourner           */
+    int fd;                                 /* Flux ouvert en écriture     */
+
+    result = false;
+
+    fd = open(pathname, O_WRONLY | O_APPEND, 0644);
+    if (fd == -1)
+    {
+        perror("open()");
+        goto fchf_exit;
+    }
+
+    dprintf(fd, "\n");
+    dprintf(fd, "};\n");
+
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+    dprintf(fd, "\n");
+
+    dprintf(fd, "#endif  /* _%s_HOOKS_H */\n", info->guard);
+
+    result = true;
+
+ fchf_exit:
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : fd   = flux ouvert en écriture mis à disposition.            *
+*                info = précisions quant à la génération.                     *
+*                                                                             *
 *  Description : Initialise le contenu utile du fichier des descriptions.     *
 *                                                                             *
 *  Retour      : -                                                            *
@@ -1847,7 +2236,9 @@ static void init_coder_descriptions_file(int fd, const output_info *info)
 
     dprintf(fd, "\n");
     dprintf(fd, "\n");
+
     dprintf(fd, "#include \"identifiers.h\"\n");
+
     dprintf(fd, "\n");
     dprintf(fd, "\n");
     dprintf(fd, "\n");
@@ -1891,13 +2282,13 @@ bool output_coder_description(const rented_coder *coder, const output_info *info
     if (coder->useless)
     {
         result = true;
-        goto ock_exit;
+        goto ocd_exit;
     }
 
     /* Ouverture de la destination */
 
     fd = open_global_header_file(coder, info, "descriptions", &created);
-    if (fd == -1) goto ock_exit;
+    if (fd == -1) goto ocd_exit;
 
     if (created)
     {
@@ -1928,7 +2319,7 @@ bool output_coder_description(const rented_coder *coder, const output_info *info
 
     result = true;
 
- ock_exit:
+ ocd_exit:
 
     return result;
 
diff --git a/tools/d2c/coder.h b/tools/d2c/coder.h
index a3fc81f..34544c2 100644
--- a/tools/d2c/coder.h
+++ b/tools/d2c/coder.h
@@ -147,12 +147,24 @@ bool output_coder_identifier(const rented_coder *, const output_info *);
 /* Finalise le contenu utile du fichier des identifiants. */
 bool fini_coder_identifiers_file(const char *, const output_info *);
 
+/* Génère ou complète un fichier créant les sous-identifiants. */
+bool output_coder_sub_identifier(const rented_coder *, const output_info *);
+
+/* Finalise le contenu utile du fichier des sous-identifiants. */
+bool fini_coder_sub_identifiers_file(const char *, const output_info *);
+
 /* Génère ou complète un fichier constituant les mots clefs. */
 bool output_coder_keyword(const rented_coder *, const output_info *);
 
 /* Finalise le contenu utile du fichier des mots clefs. */
 bool fini_coder_keywords_file(const char *, const output_info *);
 
+/* Génère ou complète un fichier constituant les décrochages. */
+bool output_coder_hooks(const rented_coder *, const output_info *);
+
+/* Finalise le contenu utile du fichier des décrochages. */
+bool fini_coder_hooks_file(const char *, const output_info *);
+
 /* Génère ou complète un fichier constituant les descriptions. */
 bool output_coder_description(const rented_coder *, const output_info *);
 
diff --git a/tools/d2c/d2c.c b/tools/d2c/d2c.c
index ee28af4..1d9b5b6 100644
--- a/tools/d2c/d2c.c
+++ b/tools/d2c/d2c.c
@@ -287,12 +287,18 @@ int main(int argc, char **argv)
             status = output_coder_identifier(coder, &info);
             if (!status) goto clean_exit;
 
-            if (info.type == IOT_FORMAT)
+            if (info.type == IOT_RAW)
             {
-                status = output_coder_keyword(coder, &info);
+                status = output_coder_sub_identifier(coder, &info);
                 if (!status) goto clean_exit;
             }
 
+            status = output_coder_keyword(coder, &info);
+            if (!status) goto clean_exit;
+
+            status = output_coder_hooks(coder, &info);
+            if (!status) goto clean_exit;
+
             status = output_coder_description(coder, &info);
             if (!status) goto clean_exit;
 
@@ -316,9 +322,15 @@ int main(int argc, char **argv)
             else if (strcmp(base, "identifiers.h") == 0)
                 status = fini_coder_identifiers_file(argv[optind], &info);
 
-            else if (info.type == IOT_FORMAT && strcmp(base, "keywords.h") == 0)
+            else if (strcmp(base, "subidentifiers.h") == 0 && info.type == IOT_RAW)
+                status = fini_coder_sub_identifiers_file(argv[optind], &info);
+
+            else if (strcmp(base, "keywords.h") == 0)
                 status = fini_coder_keywords_file(argv[optind], &info);
 
+            else if (strcmp(base, "hooks.h") == 0)
+                status = fini_coder_hooks_file(argv[optind], &info);
+
             else if (strcmp(base, "descriptions.h") == 0)
                 status = fini_coder_descriptions_file(argv[optind], &info);
 
diff --git a/tools/d2c/d2c.mk b/tools/d2c/d2c.mk
index 10bd226..c889fd4 100644
--- a/tools/d2c/d2c.mk
+++ b/tools/d2c/d2c.mk
@@ -29,6 +29,7 @@ fix_verbose_0 = echo "  FIX     " `basename $$f`;
 
 # FIXED_C_INCLUDES =
 # FIXED_H_INCLUDES =
+# FIXED_H_HOOKS_INCLUDES =
 
 
 SUFFIXES = .g
@@ -51,17 +52,21 @@ finish_headers:
 	done
 
 fix_includes_in_c_templates:
-	@for f in `find $(D2C_OUTDIR) -type f -name '*.c'`; do						\
-		if grep -q '##INCLUDES##' $$f; then										\
-			$(fix_verbose)sed -i 's@##INCLUDES##@$(FIXED_C_INCLUDES)@' $$f;		\
-		fi;																		\
+	@for f in `find $(D2C_OUTDIR) -type f -name '*.c'`; do									\
+		if grep -q '##INCLUDES##' $$f; then													\
+			$(fix_verbose)sed -i 's@##INCLUDES##@$(FIXED_C_INCLUDES)@' $$f;					\
+		fi;																					\
 	done
 
 fix_includes_in_h_templates:
-	@for f in `find $(D2C_OUTDIR) -type f -name '*.h'`; do						\
-		if grep -q '##INCLUDES##' $$f; then										\
-			$(fix_verbose)sed -i 's@##INCLUDES##@$(FIXED_H_INCLUDES)@' $$f ;	\
-		fi;																		\
+	@for f in `find $(D2C_OUTDIR) -type f -name '*.h'`; do									\
+		if grep -q '##INCLUDES##' $$f; then													\
+			if [ `basename $$f` == "hooks.h" ]; then										\
+				$(fix_verbose)sed -i 's@##INCLUDES##@$(FIXED_H_HOOKS_INCLUDES)@' $$f ;		\
+			else																			\
+				$(fix_verbose)sed -i 's@##INCLUDES##@$(FIXED_H_INCLUDES)@' $$f ;			\
+			fi;																				\
+		fi;																					\
 	done
 
 # Merci http://www.commandlinefu.com/commands/view/10276/grep-tab-t
diff --git a/tools/d2c/encoding.c b/tools/d2c/encoding.c
index 95dca46..9ed4663 100644
--- a/tools/d2c/encoding.c
+++ b/tools/d2c/encoding.c
@@ -188,6 +188,8 @@ char *build_encoding_spec_prefix(const encoding_spec *spec)
 {
     char *result;                           /* Chaîne à retourner          */
 
+    assert(spec->lprefix);
+
     asprintf(&result, "%s%u", spec->lprefix, spec->index);
 
     return result;
@@ -308,7 +310,7 @@ encoding_syntax *get_current_encoding_syntax(const encoding_spec *spec)
 *  Paramètres  : spec = spécification servant de base à l'opération.          *
 *                fd   = descripteur d'un flux ouvert en écriture.             *
 *                arch = architecture visée par l'opération.                   *
-*                id   = identifiant unique attribué à l'instruction.          *
+*                id   = désignation de l'identifiant d'instruction.           *
 *                pp   = pré-processeur pour les échanges de chaînes.          *
 *                                                                             *
 *  Description : Traduit en code une sous-fonction de désassemblage.          *
@@ -319,11 +321,13 @@ encoding_syntax *get_current_encoding_syntax(const encoding_spec *spec)
 *                                                                             *
 ******************************************************************************/
 
-bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const char *arch, const instr_id *id, const pre_processor *pp)
+bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const char *arch, const char *id, const pre_processor *pp)
 {
     bool result;                            /* Bilan à retourner           */
     bool openbar;                           /* Syntaxe unique par défaut ? */
     disass_assert *dassert;                 /* Eventuelles conditions      */
+    char *suffix;                           /* Complément d'identifiant    */
+    char *sid;                              /* Base de sous-identifiant    */
     size_t i;                               /* Boucle de parcours          */
     bool op_decl;                           /* Suivi des déclaration #1    */
     bool imm_decl;                          /* Suivi des déclaration #2    */
@@ -384,9 +388,6 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
 
     dprintf(fd, "\n");
 
-    result = declare_hook_functions(spec->hooks, fd);
-    if (!result) goto wesrd_exit;
-
     /* Vérification que le décodage est possible */
 
     result &= check_bits_correctness(spec->bits, fd);
@@ -407,8 +408,17 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
     result = define_used_bits_fields(spec->bits, fd);
     if (!result) goto wesrd_exit;
 
+    suffix = build_encoding_spec_prefix(spec);
+    make_string_upper(suffix);
+
+    asprintf(&sid, "%s_%s", id, suffix);
+
+    free(suffix);
+
     for (i = 0; i < spec->syntax_count && result; i++)
-        result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, &bad_exit);
+        result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, i, &bad_exit);
+
+    free(sid);
 
     if (!result)
         goto wesrd_exit;
@@ -430,11 +440,6 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
 
     dprintf(fd, "\n");
 
-    /* Inscriptions des éventuelles fonctions ou propriété à lier */
-
-    result = write_hook_functions(spec->hooks, fd);
-    if (!result) goto wesrd_exit;
-
     /* Conclusion globale */
 
     dprintf(fd, "\treturn result;\n");
@@ -476,10 +481,9 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
 *                                                                             *
 ******************************************************************************/
 
-bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const char *arch, const instr_id *id, const char *prefix)
+bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const char *arch, const char *id, const char *prefix)
 {
     bool result;                            /* Bilan à retourner           */
-    unsigned int iid;                       /* Identifiant unique attribué */
     bool bad_exit;                          /* Ajout d'une sortie d'échec ?*/
     conv_list *conversions;                 /* Conversions de la syntaxe   */
     decoding_rules *rules;                  /* Règles de la syntaxe        */
@@ -491,22 +495,12 @@ bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const
 
     dprintf(fd, "\n");
 
-    result = declare_hook_functions(spec->hooks, fd);
-    if (!result) goto wesfd_exit;
-
     /* Création de l'instruction en elle-même */
 
-    iid = get_instruction_id_value(id);
-
-    dprintf(fd, "\tresult = g_%s_instruction_new(0x%x);\n", arch, iid);
+    dprintf(fd, "\tresult = g_%s_instruction_new(%s);\n", arch, id);
 
     dprintf(fd, "\n");
 
-    /* Inscriptions des éventuelles fonctions ou propriété à lier */
-
-    result = write_hook_functions(spec->hooks, fd);
-    if (!result) goto wesfd_exit;
-
     bad_exit = false;
 
     assert(spec->syntax_count <= 1);
@@ -558,3 +552,179 @@ bool write_encoding_spec_format_disass(const encoding_spec *spec, int fd, const
     return result;
 
 }
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : spec   = spécification servant de base à l'opération.        *
+*                fd     = descripteur d'un flux ouvert en écriture.           *
+*                name   = désignation de l'identifiant d'instruction.         *
+*                                                                             *
+*  Description : Imprime les mots clefs de chaque syntaxe.                    *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool write_encoding_spec_keywords(const encoding_spec *spec, int fd, const char *name)
+{
+    bool result;                            /* Bilan à retourner           */
+    char *suffix;                           /* Complément d'identifiant    */
+    size_t i;                               /* Boucle de parcours          */
+    asm_pattern *pattern;                   /* Définition d'assemblage     */
+    const char *keyword;                    /* Mot clef principal          */
+
+    result = true;
+
+    suffix = build_encoding_spec_prefix(spec);
+    make_string_upper(suffix);
+
+    for (i = 0; i < spec->syntax_count; i++)
+    {
+        /* Impression de la colonne */
+
+        if (spec->syntax_count == 1)
+            dprintf(fd, "\t[%s_%s]", name, suffix);
+        else
+            dprintf(fd, "\t[%s_%s_%zu]", name, suffix, i);
+
+        /* Impression des décrochages */
+
+        pattern = get_asm_pattern_in_encoding_syntax(spec->syntaxes[i]);
+
+        keyword = get_keyword_from_asm_pattern(pattern);
+
+        dprintf(fd, " = \"%s\",\n", keyword);
+
+    }
+
+    free(suffix);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : spec   = spécification servant de base à l'opération.        *
+*                fd     = descripteur d'un flux ouvert en écriture.           *
+*                name   = désignation de l'identifiant d'instruction.         *
+*                                                                             *
+*  Description : Imprime la définition d'un sous-identifiant pour un encodage.*
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool write_encoding_spec_subid(const encoding_spec *spec, int fd, const char *name)
+{
+    bool result;                            /* Bilan à retourner           */
+    char *suffix;                           /* Complément d'identifiant    */
+    size_t i;                               /* Boucle de parcours          */
+    instr_id *subid;                        /* Sous-identifiant de syntaxe */
+    unsigned int idval;                     /* Identifiant unique attribué */
+
+    result = true;
+
+    suffix = build_encoding_spec_prefix(spec);
+    make_string_upper(suffix);
+
+    for (i = 0; i < spec->syntax_count; i++)
+    {
+        subid = get_encoding_syntax_subid(spec->syntaxes[i]);
+        idval = get_instruction_id_value(subid);
+
+        if (spec->syntax_count == 1)
+            dprintf(fd, "\t%s_%s = %u,\n", name, suffix, idval);
+        else
+            dprintf(fd, "\t%s_%s_%zu = %u,\n", name, suffix, i, idval);
+
+    }
+
+    free(suffix);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : spec   = spécification servant de base à l'opération.        *
+*                fd     = descripteur d'un flux ouvert en écriture.           *
+*                name   = désignation de l'identifiant d'instruction.         *
+*                refine = utilisation d'un identifiant plus précis ?          *
+*                                                                             *
+*  Description : Imprime d'éventuels décrochages spécifiés pour un encodage.  *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool write_encoding_spec_hooks(const encoding_spec *spec, int fd, const char *name, bool refine)
+{
+    bool result;                            /* Bilan à retourner           */
+    char *suffix;                           /* Complément d'identifiant    */
+    size_t i;                               /* Boucle de parcours          */
+
+    if (!has_hook_functions(spec->hooks))
+        result = true;
+
+    else
+    {
+        if (refine)
+        {
+            suffix = build_encoding_spec_prefix(spec);
+            make_string_upper(suffix);
+
+            for (i = 0; i < spec->syntax_count; i++)
+            {
+                /* Impression de la colonne */
+
+                if (spec->syntax_count == 1)
+                    dprintf(fd, "\t[%s_%s]", name, suffix);
+                else
+                    dprintf(fd, "\t[%s_%s_%zu]", name, suffix, i);
+
+                /* Impression des décrochages */
+
+                dprintf(fd, " = {\n", name);
+
+                result = write_hook_functions(spec->hooks, fd);
+
+                dprintf(fd, "\t},\n", name);
+
+            }
+
+            free(suffix);
+
+        }
+
+        else
+        {
+            /* Impression de la colonne */
+
+            dprintf(fd, "\t[%s]", name);
+
+            /* Impression des décrochages */
+
+            dprintf(fd, " = {\n", name);
+
+            result = write_hook_functions(spec->hooks, fd);
+
+            dprintf(fd, "\t},\n", name);
+
+        }
+
+    }
+
+    return result;
+
+}
diff --git a/tools/d2c/encoding.h b/tools/d2c/encoding.h
index 5e5eb14..cd93b95 100644
--- a/tools/d2c/encoding.h
+++ b/tools/d2c/encoding.h
@@ -33,7 +33,6 @@
 #include "bits/manager.h"
 #include "format/manager.h"
 #include "hooks/manager.h"
-#include "id/manager.h"
 
 
 
@@ -72,10 +71,19 @@ void push_new_encoding_syntax(encoding_spec *);
 encoding_syntax *get_current_encoding_syntax(const encoding_spec *);
 
 /* Traduit en code une sous-fonction de désassemblage. */
-bool write_encoding_spec_raw_disass(const encoding_spec *, int, const char *, const instr_id *, const pre_processor *);
+bool write_encoding_spec_raw_disass(const encoding_spec *, int, const char *, const char *, const pre_processor *);
 
 /* Traduit en code une sous-fonction de désassemblage. */
-bool write_encoding_spec_format_disass(const encoding_spec *, int, const char *, const instr_id *, const char *);
+bool write_encoding_spec_format_disass(const encoding_spec *, int, const char *, const char *, const char *);
+
+/* Imprime les mots clefs de chaque syntaxe. */
+bool write_encoding_spec_keywords(const encoding_spec *, int, const char *);
+
+/* Imprime la définition d'un sous-identifiant pour un encodage. */
+bool write_encoding_spec_subid(const encoding_spec *, int, const char *);
+
+/* Imprime d'éventuels décrochages spécifiés pour un encodage. */
+bool write_encoding_spec_hooks(const encoding_spec *, int, const char *, bool);
 
 
 
diff --git a/tools/d2c/grammar.y b/tools/d2c/grammar.y
index 0c79f04..ad6531a 100644
--- a/tools/d2c/grammar.y
+++ b/tools/d2c/grammar.y
@@ -85,53 +85,55 @@ static void *map_input_data(const char *, size_t *);
         push_new_encoding_syntax(__spec);                           \
     })
 
-#define handle_coder_asm(c, r)                                      \
+#define handle_coder_subid(c, r)                                    \
     ({                                                              \
         encoding_spec *__spec;                                      \
         encoding_syntax *__syntax;                                  \
-        asm_pattern *__pattern;                                     \
+        instr_id *__subid;                                          \
         bool __status;                                              \
         __spec = get_current_encoding_spec(c);                      \
         __syntax = get_current_encoding_syntax(__spec);             \
-        __pattern = get_asm_pattern_in_encoding_syntax(__syntax);   \
-        __status = load_asm_pattern_from_raw_line(__pattern, r);    \
+        __subid = get_encoding_syntax_subid(__syntax);              \
+        __status = load_id_from_raw_line(__subid, r);               \
         if (!__status) YYABORT;                                     \
     })
 
-#define handle_coder_conversions(c, r)                              \
+#define handle_coder_assertions(c, r)                               \
     ({                                                              \
         encoding_spec *__spec;                                      \
         encoding_syntax *__syntax;                                  \
-        conv_list *__list;                                          \
+        disass_assert *__dassert;                                   \
         bool __status;                                              \
         __spec = get_current_encoding_spec(c);                      \
         __syntax = get_current_encoding_syntax(__spec);             \
-        __list = get_conversions_in_encoding_syntax(__syntax);      \
-        __status = load_convs_from_raw_block(__list, r);            \
+        __dassert = get_assertions_for_encoding_syntax(__syntax);   \
+        __status = load_assertions_from_raw_block(__dassert, r);    \
         if (!__status) YYABORT;                                     \
     })
 
-#define handle_coder_assertions(c, r)                               \
+#define handle_coder_conversions(c, r)                              \
     ({                                                              \
         encoding_spec *__spec;                                      \
         encoding_syntax *__syntax;                                  \
-        disass_assert *__dassert;                                   \
+        conv_list *__list;                                          \
         bool __status;                                              \
         __spec = get_current_encoding_spec(c);                      \
         __syntax = get_current_encoding_syntax(__spec);             \
-        __dassert = get_assertions_for_encoding_syntax(__syntax);   \
-        __status = load_assertions_from_raw_block(__dassert, r);    \
+        __list = get_conversions_in_encoding_syntax(__syntax);      \
+        __status = load_convs_from_raw_block(__list, r);            \
         if (!__status) YYABORT;                                     \
     })
 
-#define handle_coder_hooks(c, r)                                    \
+#define handle_coder_asm(c, r)                                      \
     ({                                                              \
         encoding_spec *__spec;                                      \
-        instr_hooks *__hooks;;                                      \
+        encoding_syntax *__syntax;                                  \
+        asm_pattern *__pattern;                                     \
         bool __status;                                              \
         __spec = get_current_encoding_spec(c);                      \
-        __hooks = get_hooks_in_encoding_spec(__spec);               \
-        __status = load_hooks_from_raw_line(__hooks, r);            \
+        __syntax = get_current_encoding_syntax(__spec);             \
+        __pattern = get_asm_pattern_in_encoding_syntax(__syntax);   \
+        __status = load_asm_pattern_from_raw_line(__pattern, r);    \
         if (!__status) YYABORT;                                     \
     })
 
@@ -148,6 +150,17 @@ static void *map_input_data(const char *, size_t *);
         if (!__status) YYABORT;                                     \
     })
 
+#define handle_coder_hooks(c, r)                                    \
+    ({                                                              \
+        encoding_spec *__spec;                                      \
+        instr_hooks *__hooks;;                                      \
+        bool __status;                                              \
+        __spec = get_current_encoding_spec(c);                      \
+        __hooks = get_hooks_in_encoding_spec(__spec);               \
+        __status = load_hooks_from_raw_line(__hooks, r);            \
+        if (!__status) YYABORT;                                     \
+    })
+
 }
 
 %union {
@@ -184,7 +197,7 @@ YY_DECL;
 %token COPYRIGHT
 %token TITLE
 %token INS_NAME INS_SEP INS_DETAILS
-%token ID
+%token ID SUBID
 %token DESC
 
 %token ENCODING
@@ -261,11 +274,14 @@ raw_content : /* empty */
             | hooks raw_content
 
 raw_syntax : /* empty */
+           | subid raw_syntax
            | assertions raw_syntax
            | conversions raw_syntax
            | asm raw_syntax
            | rules raw_syntax
 
+subid : SUBID RAW_LINE { handle_coder_subid(coder, $2); }
+
 assertions : ASSERT RAW_BLOCK { handle_coder_assertions(coder, $2); }
 
 conversions : CONV RAW_BLOCK { handle_coder_conversions(coder, $2); }
diff --git a/tools/d2c/hooks/manager.c b/tools/d2c/hooks/manager.c
index dc70c0c..35d6eba 100644
--- a/tools/d2c/hooks/manager.c
+++ b/tools/d2c/hooks/manager.c
@@ -24,6 +24,7 @@
 #include "manager.h"
 
 
+#include <assert.h>
 #include <malloc.h>
 #include <string.h>
 
@@ -134,9 +135,32 @@ void register_hook_function(instr_hooks *hooks, char *type, char *name)
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : hooks = gestionnaire d'un ensemble de fonctions associées.   *
+*                                                                             *
+*  Description : Indique si des décrochages sont définis.                     *
+*                                                                             *
+*  Retour      : Bilan de la consultation.                                    *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool has_hook_functions(const instr_hooks *hooks)
+{
+    bool result;                            /* Bilan à retourner           */
+
+    result = (hooks->func_count > 0);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : hooks = gestionnaire d'un ensemble de fonctions associées.   *
 *                fd    = descripteur d'un flux ouvert en écriture.            *
 *                                                                             *
-*  Description : Déclare des opérations complémentaires pour une instruction. *
+*  Description : Imprime une liste de décrochages spécifiés.                  *
 *                                                                             *
 *  Retour      : Bilan de l'opération.                                        *
 *                                                                             *
@@ -144,7 +168,7 @@ void register_hook_function(instr_hooks *hooks, char *type, char *name)
 *                                                                             *
 ******************************************************************************/
 
-bool declare_hook_functions(const instr_hooks *hooks, int fd)
+bool write_hook_functions(const instr_hooks *hooks, int fd)
 {
     bool result;                            /* Bilan à retourner           */
     size_t i;                               /* Boucle de parcours #1       */
@@ -173,55 +197,13 @@ bool declare_hook_functions(const instr_hooks *hooks, int fd)
 
     result = true;
 
-    if (hooks->func_count > 0)
-    {
-        dprintf(fd, "\tstatic const instr_hook_fc hooks[IPH_COUNT] = {\n\n");
-
-        for (i = 0; i < (sizeof(hook_types) / sizeof(hook_types[0])); i++)
-        {
-            func = find_hook_by_name(hooks, hook_types[i]);
-
-            dprintf(fd, "\t\t[IPH_%s] = (instr_hook_fc)%s,\n", hook_types[i], func != NULL ? func->name : "NULL");
-
-        }
-
-        dprintf(fd, "\n");
-
-        dprintf(fd, "\t};\n");
-
-        dprintf(fd, "\n");
-
-    }
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : hooks = gestionnaire d'un ensemble de fonctions associées.   *
-*                fd    = descripteur d'un flux ouvert en écriture.            *
-*                                                                             *
-*  Description : Associe dans le code des fonctions à une instruction.        *
-*                                                                             *
-*  Retour      : Bilan de l'opération.                                        *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-bool write_hook_functions(const instr_hooks *hooks, int fd)
-{
-    bool result;                            /* Bilan à retourner           */
-
-    result = true;
+    assert(has_hook_functions(hooks));
 
-    if (hooks->func_count > 0)
+    for (i = 0; i < (sizeof(hook_types) / sizeof(hook_types[0])); i++)
     {
-        dprintf(fd, "\tg_arch_instruction_set_hooks(result, hooks);\n");
+        func = find_hook_by_name(hooks, hook_types[i]);
 
-        dprintf(fd, "\n");
+        dprintf(fd, "\t\t[IPH_%s] = (instr_hook_fc)%s,\n", hook_types[i], func != NULL ? func->name : "NULL");
 
     }
 
diff --git a/tools/d2c/hooks/manager.h b/tools/d2c/hooks/manager.h
index c07269e..49ebd19 100644
--- a/tools/d2c/hooks/manager.h
+++ b/tools/d2c/hooks/manager.h
@@ -43,10 +43,10 @@ void delete_instr_hooks(instr_hooks *);
 /* Enregistre l'utilité d'une fonction pour une instruction. */
 void register_hook_function(instr_hooks *, char *, char *);
 
-/* Déclare des opérations complémentaires pour une instruction. */
-bool declare_hook_functions(const instr_hooks *, int);
+/* Indique si des décrochages sont définis. */
+bool has_hook_functions(const instr_hooks *);
 
-/* Associe dans le code des fonctions à une instruction. */
+/* Imprime une liste de décrochages spécifiés. */
 bool write_hook_functions(const instr_hooks *, int);
 
 
diff --git a/tools/d2c/syntax.c b/tools/d2c/syntax.c
index a38fdbb..dcac28e 100644
--- a/tools/d2c/syntax.c
+++ b/tools/d2c/syntax.c
@@ -32,6 +32,7 @@
 /* Mémorisation d'une définition de syntaxe */
 struct _encoding_syntax
 {
+    instr_id *subid;                        /* Gestionnaire d'identifiant  */
     disass_assert *assertions;              /* Conditions de désassemblage */
     conv_list *conversions;                 /* Conversions des données     */
     asm_pattern *pattern;                   /* Calligraphe d'assemblage    */
@@ -59,6 +60,7 @@ encoding_syntax *create_encoding_syntax(void)
 
     result = (encoding_syntax *)calloc(1, sizeof(encoding_syntax));
 
+    result->subid = create_instruction_id();
     result->assertions = create_disass_assert();
     result->conversions = create_conv_list();
     result->pattern = create_asm_pattern();
@@ -83,6 +85,7 @@ encoding_syntax *create_encoding_syntax(void)
 
 void delete_encoding_syntax(encoding_syntax *syntax)
 {
+    delete_instruction_id(syntax->subid);
     delete_disass_assert(syntax->assertions);
     delete_conv_list(syntax->conversions);
     delete_asm_pattern(syntax->pattern);
@@ -97,6 +100,25 @@ void delete_encoding_syntax(encoding_syntax *syntax)
 *                                                                             *
 *  Paramètres  : syntax = définition de syntaxe à consulter.                  *
 *                                                                             *
+*  Description : Fournit le gestionnaire des définitions d'identifiant.       *
+*                                                                             *
+*  Retour      : Structure assurant la définition d'identifiant.              *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+instr_id *get_encoding_syntax_subid(const encoding_syntax *syntax)
+{
+    return syntax->subid;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : syntax = définition de syntaxe à consulter.                  *
+*                                                                             *
 *  Description : Fournit la liste de conditions préalables.                   *
 *                                                                             *
 *  Retour      : Structure assurant la gestion de conditions de désassemblage.*
@@ -235,6 +257,9 @@ bool declare_encoding_syntax(const encoding_syntax *syntax, int fd, const coding
 *                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]       *
 *                                                                             *
 *  Description : Amorce la construction des éléments d'une syntaxe.           *
@@ -245,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, bool *exit)
+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 result;                            /* Bilan à retourner           */
     bool conditional;                       /* Définition sous condition ? */
@@ -290,8 +315,10 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar
         dprintf(fd, "\n");
     }
 
-    dprintf(fd, "\t%sresult = g_%s_instruction_new(\"%s\");\n",
-            tab, arch, get_keyword_from_asm_pattern(syntax->pattern));
+    if (alone)
+        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, "\n");
 
diff --git a/tools/d2c/syntax.h b/tools/d2c/syntax.h
index 127d6ba..645f0ce 100644
--- a/tools/d2c/syntax.h
+++ b/tools/d2c/syntax.h
@@ -29,6 +29,7 @@
 #include "assert/manager.h"
 #include "bits/manager.h"
 #include "conv/manager.h"
+#include "id/manager.h"
 #include "pattern/manager.h"
 #include "rules/manager.h"
 
@@ -44,6 +45,9 @@ encoding_syntax *create_encoding_syntax(void);
 /* Supprime de la mémoire le suivi d'une définition de syntaxe. */
 void delete_encoding_syntax(encoding_syntax *);
 
+/* Fournit le gestionnaire des définitions d'identifiant. */
+instr_id *get_encoding_syntax_subid(const encoding_syntax *);
+
 /* Fournit la liste de conditions préalables. */
 disass_assert *get_assertions_for_encoding_syntax(const encoding_syntax *);
 
@@ -63,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, bool *);
+bool write_encoding_syntax(const encoding_syntax *, int, const char *, const coding_bits *, bool, const char *, const char *, size_t, bool *);
 
 
 
diff --git a/tools/d2c/tokens.l b/tools/d2c/tokens.l
index 60dd257..6d32e33 100644
--- a/tools/d2c/tokens.l
+++ b/tools/d2c/tokens.l
@@ -85,6 +85,8 @@
 
 <syntax_content>[ \t\n]+        { }
 
+<syntax_content>"@subid"        { yy_push_state(raw_line); return SUBID; }
+
 <syntax_content>"@assert"       { yy_push_state(raw_block); return ASSERT; }
 
 <syntax_content>"@conv"         { yy_push_state(raw_block); return CONV; }
-- 
cgit v0.11.2-87-g4458