diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2018-05-14 15:52:32 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2018-05-14 15:52:32 (GMT) | 
| commit | 6178efcee9fc18d11a773827dca8b95304e75731 (patch) | |
| tree | 77c664dfac355b7af803d33b1afded7925647b6d | |
| parent | aba51093c8ebe4b0550557281f8d0d025027b1cb (diff) | |
Used unique identifiers for instructions everywhere.
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; } | 
