summaryrefslogtreecommitdiff
path: root/src/arch/arm/v7/arm.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-12-03 22:41:29 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-12-03 22:41:29 (GMT)
commit172fce9bab61de1ffa89f731b5d10f96e209afc1 (patch)
tree31aee5a141979fa99bbf88cbf2b7990de0ec3832 /src/arch/arm/v7/arm.c
parentf7ef27195f8c9dc35e5e210a333b74fcfae5ad71 (diff)
Begun to support more than the only 'ARMv7' architecture for ARM (ARM / Thumb16 / Thumb32).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@433 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/arm/v7/arm.c')
-rw-r--r--src/arch/arm/v7/arm.c292
1 files changed, 119 insertions, 173 deletions
diff --git a/src/arch/arm/v7/arm.c b/src/arch/arm/v7/arm.c
index ea9819c..60e0e22 100644
--- a/src/arch/arm/v7/arm.c
+++ b/src/arch/arm/v7/arm.c
@@ -27,112 +27,58 @@
#include <stdint.h>
-#include "opcodes/opcodes.h"
+#include "opcodes/arm_opcodes.h"
+#include "opcodes/opcodes_tmp_arm.h"
#include "../../../common/bconst.h"
/* Désassemble une instruction ARMv7 de données ou autre. */
-static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instructions(uint32_t);
+static GArchInstruction *process_armv7_arm_data_processing_and_miscellaneous_instructions(uint32_t);
/* Désassemble une instruction ARMv7 de données de registre. */
-static GArchInstruction *process_armv7_data_processing_register(uint32_t);
+static GArchInstruction *process_armv7_arm_data_processing_register(uint32_t);
/* Désassemble une instruction ARMv7 de données de immédiate. */
-static GArchInstruction *process_armv7_data_processing_immediate(uint32_t);
+static GArchInstruction *process_armv7_arm_data_processing_immediate(uint32_t);
/* Désassemble une instruction ARMv7 liées aux multiplications. */
-static GArchInstruction *process_armv7_multiply_and_multiply_accumulate(uint32_t);
+static GArchInstruction *process_armv7_arm_multiply_and_multiply_accumulate(uint32_t);
/* Désassemble une instruction ARMv7 de données ou autre. */
-static GArchInstruction *process_armv7_branch_branch_with_link_and_block_data_transfer(uint32_t);
+static GArchInstruction *process_armv7_arm_branch_branch_with_link_and_block_data_transfer(uint32_t);
-// process_armv7_instruction_set_encoding
+// process_armv7_arm_instruction_set_encoding
-#define process_armv7_load_store_word_and_unsigned_byte(raw) NULL
-#define process_armv7_load_store_word_and_unsigned_byte(raw) NULL
-#define process_armv7_media_instructions(raw) NULL
-//#define process_armv7_branch_branch_with_link_and_block_data_transfer(raw) NULL
-#define process_armv7_coprocessor_instructions_and_Supervisor_call(raw) NULL
-#define process_armv7_unconditional_instructions(raw) NULL
+#define process_armv7_arm_load_store_word_and_unsigned_byte(raw) NULL
+#define process_armv7_arm_load_store_word_and_unsigned_byte(raw) NULL
+#define process_armv7_arm_media_instructions(raw) NULL
+//#define process_armv7_arm_branch_branch_with_link_and_block_data_transfer(raw) NULL
+#define process_armv7_arm_coprocessor_instructions_and_Supervisor_call(raw) NULL
+#define process_armv7_arm_unconditional_instructions(raw) NULL
-// process_armv7_data_processing_and_miscellaneous_instructions
+// process_armv7_arm_data_processing_and_miscellaneous_instructions
-#define process_armv7_data_processing_register_shifted_register(raw) NULL
-#define process_armv7_extra_load_store_instructions(raw) NULL
-#define process_armv7_miscellaneous_instructions(raw) NULL
-#define process_armv7_halfword_multiply_and_multiply_accumulate(raw) NULL
-//#define process_armv7_multiply_and_multiply_accumulate(raw) NULL
-#define process_armv7_synchronization_primitives(raw) NULL
-#define process_armv7_extra_load_store_instructions_unprivileged(raw) NULL
-#define process_armv7_extra_load_store_instructions(raw) NULL
-//#define process_armv7_data_processing_immediate(raw) NULL
-#define armv7_read_instr_mov_immediate(raw) NULL
-#define armv7_read_instr_movt(raw) NULL
-#define process_armv7_msr_immediate_and_hints(raw) NULL
+#define process_armv7_arm_data_processing_register_shifted_register(raw) NULL
+#define process_armv7_arm_extra_load_store_instructions(raw) NULL
+#define process_armv7_arm_miscellaneous_instructions(raw) NULL
+#define process_armv7_arm_halfword_multiply_and_multiply_accumulate(raw) NULL
+//#define process_armv7_arm_multiply_and_multiply_accumulate(raw) NULL
+#define process_armv7_arm_synchronization_primitives(raw) NULL
+#define process_armv7_arm_extra_load_store_instructions_unprivileged(raw) NULL
+#define process_armv7_arm_extra_load_store_instructions(raw) NULL
+//#define process_armv7_arm_data_processing_immediate(raw) NULL
+#define process_armv7_arm_msr_immediate_and_hints(raw) NULL
-// process_armv7_data_processing_register
-/*
-#define armv7_read_instr_and_register(raw) NULL
-#define armv7_read_instr_eor_register(raw) NULL
-#define armv7_read_instr_sub_register(raw) NULL
-#define armv7_read_instr_rsb_register(raw) NULL
-#define armv7_read_instr_add_register_arm(raw) NULL
-#define armv7_read_instr_adc_register(raw) NULL
-#define armv7_read_instr_sbc_register(raw) NULL
-#define armv7_read_instr_rsc_register(raw) NULL
-#define armv7_read_instr_tst_register(raw) NULL
-#define armv7_read_instr_teq_register(raw) NULL
-#define armv7_read_instr_cmp_register(raw) NULL
-#define armv7_read_instr_cmn_register(raw) NULL
-#define armv7_read_instr_orr_register(raw) NULL
-*/
-//#define armv7_read_instr_mov_register_arm(raw) NULL
-#define armv7_read_instr_lsl_immediate(raw) NULL
-#define armv7_read_instr_lsr_immediate(raw) NULL
-#define armv7_read_instr_asr_immediate(raw) NULL
-#define armv7_read_instr_rrx(raw) NULL
-#define armv7_read_instr_ror_immediate(raw) NULL
-//#define armv7_read_instr_bic_register(raw) NULL
-//#define armv7_read_instr_mvn_register(raw) NULL
+// process_armv7_arm_data_processing_register
-// process_armv7_branch_branch_with_link_and_block_data_transfer
-
-#define armv7_read_instr_stmda_stmed(raw) NULL
-#define armv7_read_instr_ldmda_ldmfa(raw) NULL
-#define armv7_read_instr_stm_stmia_stmea(raw) NULL
-#define armv7_read_instr_ldm_ldmia_ldmfd_arm(raw) NULL
-#define armv7_read_instr_ldm_ldmia_ldmfd_arm(raw) NULL
-#define armv7_read_instr_pop_arm(raw) NULL
-#define armv7_read_instr_stmdb_stmfd(raw) NULL
-#define armv7_read_instr_stmdb_stmfd(raw) NULL
-#define armv7_read_instr_push(raw) NULL
-#define armv7_read_instr_ldmdb_ldmea(raw) NULL
-#define armv7_read_instr_stmib_stmfa(raw) NULL
-#define armv7_read_instr_ldmib_ldmed(raw) NULL
-#define armv7_read_instr_stm_user_registers(raw) NULL
-#define armv7_read_instr_ldm_user_registers(raw) NULL
-#define armv7_read_instr_ldm_exception_return(raw) NULL
-#define armv7_read_instr_b(raw) NULL
-//#define armv7_read_instr_bl_blx_immediate(raw) NULL
-
-
-
-#define armv7_read_instr_adr(raw) NULL
-
-
-
-// ???
-#define armv7_read_instr_yield(raw) NULL
-#define armv7_read_instr_bx(raw) NULL
-
@@ -149,7 +95,7 @@ static GArchInstruction *process_armv7_branch_branch_with_link_and_block_data_tr
* *
******************************************************************************/
-GArchInstruction *process_armv7_instruction_set_encoding(uint32_t raw)
+GArchInstruction *process_armv7_arm_instruction_set_encoding(uint32_t raw)
{
GArchInstruction *result; /* Instruction à renvoyer */
uint32_t cond; /* Champ 'cond' à retrouver */
@@ -170,31 +116,31 @@ GArchInstruction *process_armv7_instruction_set_encoding(uint32_t raw)
if (cond != b1111)
{
if ((op1 & b110) == b000)
- result = process_armv7_data_processing_and_miscellaneous_instructions(raw);
+ result = process_armv7_arm_data_processing_and_miscellaneous_instructions(raw);
else if (op1 == b010)
- result = process_armv7_load_store_word_and_unsigned_byte(raw);
+ result = process_armv7_arm_load_store_word_and_unsigned_byte(raw);
else if (op1 == b011)
{
if (op == b0)
- result = process_armv7_load_store_word_and_unsigned_byte(raw);
+ result = process_armv7_arm_load_store_word_and_unsigned_byte(raw);
else
- result = process_armv7_media_instructions(raw);
+ result = process_armv7_arm_media_instructions(raw);
}
else if ((op1 & b110) == b100)
- result = process_armv7_branch_branch_with_link_and_block_data_transfer(raw);
+ result = process_armv7_arm_branch_branch_with_link_and_block_data_transfer(raw);
else if ((op1 & b110) == b110)
- result = process_armv7_coprocessor_instructions_and_Supervisor_call(raw);
+ result = process_armv7_arm_coprocessor_instructions_and_Supervisor_call(raw);
}
else /* if (cond == b1111) */
- result = process_armv7_unconditional_instructions(raw);
+ result = process_armv7_arm_unconditional_instructions(raw);
return result;
@@ -213,7 +159,7 @@ GArchInstruction *process_armv7_instruction_set_encoding(uint32_t raw)
* *
******************************************************************************/
-static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instructions(uint32_t raw)
+static GArchInstruction *process_armv7_arm_data_processing_and_miscellaneous_instructions(uint32_t raw)
{
GArchInstruction *result; /* Instruction à retourner */
uint32_t op; /* Champ 'op' à retrouver */
@@ -236,10 +182,10 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
if ((op1 & b11001) != b10000)
{
if ((op2 & b0001) == b0000)
- result = process_armv7_data_processing_register(raw);
+ result = process_armv7_arm_data_processing_register(raw);
else if ((op2 & b1001) == b0001)
- result = process_armv7_data_processing_register_shifted_register(raw);
+ result = process_armv7_arm_data_processing_register_shifted_register(raw);
if (result != NULL) goto padpami_found;
@@ -248,10 +194,10 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
else /* if ((op1 & b11001) == b10000) */
{
if ((op2 & b1000) == b0000)
- result = process_armv7_miscellaneous_instructions(raw);
+ result = process_armv7_arm_miscellaneous_instructions(raw);
else if ((op2 & b1001) == b1000)
- result = process_armv7_halfword_multiply_and_multiply_accumulate(raw);
+ result = process_armv7_arm_halfword_multiply_and_multiply_accumulate(raw);
if (result != NULL) goto padpami_found;
@@ -260,7 +206,7 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
if ((op1 & b10000) == b00000)
{
if (op2 == b1001)
- result = process_armv7_multiply_and_multiply_accumulate(raw);
+ result = process_armv7_arm_multiply_and_multiply_accumulate(raw);
if (result != NULL) goto padpami_found;
@@ -269,7 +215,7 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
if ((op1 & b10000) == b10000)
{
if (op2 == b1001)
- result = process_armv7_synchronization_primitives(raw);
+ result = process_armv7_arm_synchronization_primitives(raw);
if (result != NULL) goto padpami_found;
@@ -278,10 +224,10 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
if ((op1 & b10010) != b00010)
{
if (op2 == b1011)
- result = process_armv7_extra_load_store_instructions(raw);
+ result = process_armv7_arm_extra_load_store_instructions(raw);
else if ((op2 & b1101) == b1101)
- result = process_armv7_extra_load_store_instructions(raw);
+ result = process_armv7_arm_extra_load_store_instructions(raw);
if (result != NULL) goto padpami_found;
@@ -290,10 +236,10 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
else /* if ((op1 & b10010) != b00010) */
{
if (op2 == b1011)
- result = process_armv7_extra_load_store_instructions_unprivileged(raw);
+ result = process_armv7_arm_extra_load_store_instructions_unprivileged(raw);
else if ((op2 & b1101) == b1101)
- result = process_armv7_extra_load_store_instructions(raw);
+ result = process_armv7_arm_extra_load_store_instructions(raw);
if (result != NULL) goto padpami_found;
@@ -304,16 +250,16 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
else
{
if ((op1 & b11001) != b10000)
- result = process_armv7_data_processing_immediate(raw);
+ result = process_armv7_arm_data_processing_immediate(raw);
else if (op1 == b10000)
- result = armv7_read_instr_mov_immediate(raw);
+ result = armv7_read_arm_instr_mov_immediate(raw);
else if (op1 == b10100)
- result = armv7_read_instr_movt(raw);
+ result = armv7_read_arm_instr_movt(raw);
else if ((op1 & b11011) == b10010)
- result = process_armv7_msr_immediate_and_hints(raw);
+ result = process_armv7_arm_msr_immediate_and_hints(raw);
}
@@ -336,7 +282,7 @@ static GArchInstruction *process_armv7_data_processing_and_miscellaneous_instruc
* *
******************************************************************************/
-static GArchInstruction *process_armv7_data_processing_register(uint32_t raw)
+static GArchInstruction *process_armv7_arm_data_processing_register(uint32_t raw)
{
GArchInstruction *result; /* Instruction à retourner */
uint32_t op; /* Champ 'op' à retrouver */
@@ -355,84 +301,84 @@ static GArchInstruction *process_armv7_data_processing_register(uint32_t raw)
op2 = (raw >> 5) & 0x3;
if ((op & b11110) == b00000)
- result = armv7_read_instr_and_register(raw);
+ result = armv7_read_arm_instr_and_register(raw);
else if ((op & b11110) == b00010)
- result = armv7_read_instr_eor_register(raw);
+ result = armv7_read_arm_instr_eor_register(raw);
else if ((op & b11110) == b00100)
- result = armv7_read_instr_sub_register(raw);
+ result = armv7_read_arm_instr_sub_register(raw);
else if ((op & b11110) == b00110)
- result = armv7_read_instr_rsb_register(raw);
+ result = armv7_read_arm_instr_rsb_register(raw);
else if ((op & b11110) == b01000)
- result = armv7_read_instr_add_register_arm(raw);
+ result = armv7_read_arm_instr_add_register_arm(raw);
else if ((op & b11110) == b01010)
- result = armv7_read_instr_adc_register(raw);
+ result = armv7_read_arm_instr_adc_register(raw);
else if ((op & b11110) == b01100)
- result = armv7_read_instr_sbc_register(raw);
+ result = armv7_read_arm_instr_sbc_register(raw);
else if ((op & b11110) == b01110)
- result = armv7_read_instr_rsc_register(raw);
+ result = armv7_read_arm_instr_rsc_register(raw);
/*
else if ((op & b11001) == b10000)
- result = process_armv7_data_processing_and_miscellaneous_instructions(raw);
+ result = process_armv7_arm_data_processing_and_miscellaneous_instructions(raw);
*/
else if (op == b10001)
- result = armv7_read_instr_tst_register(raw);
+ result = armv7_read_arm_instr_tst_register(raw);
else if (op == b10011)
- result = armv7_read_instr_teq_register(raw);
+ result = armv7_read_arm_instr_teq_register(raw);
else if (op == b10101)
- result = armv7_read_instr_cmp_register(raw);
+ result = armv7_read_arm_instr_cmp_register(raw);
else if (op == b10111)
- result = armv7_read_instr_cmn_register(raw);
+ result = armv7_read_arm_instr_cmn_register(raw);
else if ((op & b11110) == b11000)
- result = armv7_read_instr_orr_register(raw);
+ result = armv7_read_arm_instr_orr_register(raw);
else if ((op & b11110) == b11010)
{
if (op2 == b00)
{
if (imm5 == b00000)
- result = armv7_read_instr_mov_register_arm(raw);
+ result = armv7_read_arm_instr_mov_register_arm(raw);
else
- result = armv7_read_instr_lsl_immediate(raw);
+ result = armv7_read_arm_instr_lsl_immediate(raw);
}
else if (op2 == b01)
- result = armv7_read_instr_lsr_immediate(raw);
+ result = armv7_read_arm_instr_lsr_immediate(raw);
else if (op2 == b10)
- result = armv7_read_instr_asr_immediate(raw);
+ result = armv7_read_arm_instr_asr_immediate(raw);
else if (op2 == b11)
{
if (imm5 == b00000)
- result = armv7_read_instr_rrx(raw);
+ result = armv7_read_arm_instr_rrx(raw);
else
- result = armv7_read_instr_ror_immediate(raw);
+ result = armv7_read_arm_instr_ror_immediate(raw);
}
}
else if ((op & b11110) == b11100)
- result = armv7_read_instr_bic_register(raw);
+ result = armv7_read_arm_instr_bic_register(raw);
else if ((op & b11110) == b11110)
- result = armv7_read_instr_mvn_register(raw);
+ result = armv7_read_arm_instr_mvn_register(raw);
return result;
@@ -457,7 +403,7 @@ static GArchInstruction *process_armv7_data_processing_register(uint32_t raw)
* *
******************************************************************************/
-static GArchInstruction *process_armv7_data_processing_immediate(uint32_t raw)
+static GArchInstruction *process_armv7_arm_data_processing_immediate(uint32_t raw)
{
GArchInstruction *result; /* Instruction à retourner */
uint32_t op; /* Champ 'op' à retrouver */
@@ -474,71 +420,71 @@ static GArchInstruction *process_armv7_data_processing_immediate(uint32_t raw)
rn = (raw >> 16) & 0xf;
if ((op & b11110) == b00000)
- result = armv7_read_instr_and_immediate(raw);
+ result = armv7_read_arm_instr_and_immediate(raw);
else if ((op & b11110) == b00010)
- result = armv7_read_instr_eor_immediate(raw);
+ result = armv7_read_arm_instr_eor_immediate(raw);
else if ((op & b11110) == b00100)
{
if (rn == b1111)
- result = armv7_read_instr_adr(raw);
+ result = armv7_read_arm_instr_adr(raw);
else
- result = armv7_read_instr_sub_immediate_arm(raw);
+ result = armv7_read_arm_instr_sub_immediate_arm(raw);
}
else if ((op & b11110) == b00110)
- result = armv7_read_instr_rsb_immediate(raw);
+ result = armv7_read_arm_instr_rsb_immediate(raw);
else if ((op & b11110) == b01000)
{
if (rn == b1111)
- result = armv7_read_instr_adr(raw);
+ result = armv7_read_arm_instr_adr(raw);
else
- result = armv7_read_instr_add_immediate_arm(raw);
+ result = armv7_read_arm_instr_add_immediate_arm(raw);
}
else if ((op & b11110) == b01010)
- result = armv7_read_instr_adc_immediate(raw);
+ result = armv7_read_arm_instr_adc_immediate(raw);
else if ((op & b11110) == b01100)
- result = armv7_read_instr_sbc_immediate(raw);
+ result = armv7_read_arm_instr_sbc_immediate(raw);
else if ((op & b11110) == b01110)
- result = armv7_read_instr_rsc_immediate(raw);
+ result = armv7_read_arm_instr_rsc_immediate(raw);
/*
else if ((op & b11110) == b10000)
- result = process_armv7_data_processing_and_miscellaneous_instructions(raw);
+ result = process_armv7_arm_data_processing_and_miscellaneous_instructions(raw);
*/
else if (op == b10001)
- result = armv7_read_instr_tst_immediate(raw);
+ result = armv7_read_arm_instr_tst_immediate(raw);
else if (op == b10011)
- result = armv7_read_instr_teq_immediate(raw);
+ result = armv7_read_arm_instr_teq_immediate(raw);
else if (op == b10101)
- result = armv7_read_instr_cmp_immediate(raw);
+ result = armv7_read_arm_instr_cmp_immediate(raw);
else if (op == b10111)
- result = armv7_read_instr_cmn_immediate(raw);
+ result = armv7_read_arm_instr_cmn_immediate(raw);
else if ((op & b11110) == b11000)
- result = armv7_read_instr_orr_immediate(raw);
+ result = armv7_read_arm_instr_orr_immediate(raw);
else if ((op & b11110) == b11010)
- result = armv7_read_instr_mov_immediate(raw);
+ result = armv7_read_arm_instr_mov_immediate(raw);
else if ((op & b11110) == b11100)
- result = armv7_read_instr_bic_immediate(raw);
+ result = armv7_read_arm_instr_bic_immediate(raw);
else if ((op & b11110) == b11110)
- result = armv7_read_instr_mvn_immediate(raw);
+ result = armv7_read_arm_instr_mvn_immediate(raw);
return result;
@@ -567,7 +513,7 @@ static GArchInstruction *process_armv7_data_processing_immediate(uint32_t raw)
* *
******************************************************************************/
-static GArchInstruction *process_armv7_multiply_and_multiply_accumulate(uint32_t raw)
+static GArchInstruction *process_armv7_arm_multiply_and_multiply_accumulate(uint32_t raw)
{
GArchInstruction *result; /* Instruction à retourner */
uint32_t op; /* Champ 'op' à retrouver */
@@ -585,34 +531,34 @@ static GArchInstruction *process_armv7_multiply_and_multiply_accumulate(uint32_t
op = (raw >> 20) & 0x1f;
if ((op & b1110) == b0000)
- result = armv7_read_instr_mul(raw);
+ result = armv7_read_arm_instr_mul(raw);
else if ((op & b1110) == b0010)
- result = armv7_read_instr_mla(raw);
+ result = armv7_read_arm_instr_mla(raw);
else if (op == b0100)
- result = armv7_read_instr_umaal(raw);
+ result = armv7_read_arm_instr_umaal(raw);
else if (op == b0101)
result = NULL; /* Non défini */
else if (op == b0110)
- result = armv7_read_instr_mls(raw);
+ result = armv7_read_arm_instr_mls(raw);
else if (op == b0111)
result = NULL; /* Non défini */
else if ((op & b1110) == b1000)
- result = armv7_read_instr_umull(raw);
+ result = armv7_read_arm_instr_umull(raw);
else if ((op & b1110) == b1010)
- result = armv7_read_instr_umlal(raw);
+ result = armv7_read_arm_instr_umlal(raw);
else if ((op & b1110) == b1100)
- result = armv7_read_instr_smull(raw);
+ result = armv7_read_arm_instr_smull(raw);
else if ((op & b1110) == b1110)
- result = armv7_read_instr_smlal(raw);
+ result = armv7_read_arm_instr_smlal(raw);
return result;
@@ -637,7 +583,7 @@ static GArchInstruction *process_armv7_multiply_and_multiply_accumulate(uint32_t
* *
******************************************************************************/
-static GArchInstruction *process_armv7_branch_branch_with_link_and_block_data_transfer(uint32_t raw)
+static GArchInstruction *process_armv7_arm_branch_branch_with_link_and_block_data_transfer(uint32_t raw)
{
GArchInstruction *result; /* Instruction à retourner */
uint32_t op; /* Champ 'op' à retrouver */
@@ -656,61 +602,61 @@ static GArchInstruction *process_armv7_branch_branch_with_link_and_block_data_tr
r = (raw >> 15) & 0x1;
if ((op & b111101) == b000000)
- result = armv7_read_instr_stmda_stmed(raw);
+ result = armv7_read_arm_instr_stmda_stmed(raw);
else if ((op & b111101) == b000001)
- result = armv7_read_instr_ldmda_ldmfa(raw);
+ result = armv7_read_arm_instr_ldmda_ldmfa(raw);
else if ((op & b111101) == b001000)
- result = armv7_read_instr_stm_stmia_stmea(raw);
+ result = armv7_read_arm_instr_stm_stmia_stmea(raw);
else if (op == b001001)
- result = armv7_read_instr_ldm_ldmia_ldmfd_arm(raw);
+ result = armv7_read_arm_instr_ldm_ldmia_ldmfd_arm(raw);
else if (op == b001011)
{
if (rn != b1101)
- result = armv7_read_instr_ldm_ldmia_ldmfd_arm(raw);
+ result = armv7_read_arm_instr_ldm_ldmia_ldmfd_arm(raw);
else /* if (rn == b1101) */
- result = armv7_read_instr_pop_arm(raw);
+ result = armv7_read_arm_instr_pop_arm(raw);
}
else if (op == b010000)
- result = armv7_read_instr_stmdb_stmfd(raw);
+ result = armv7_read_arm_instr_stmdb_stmfd(raw);
else if (op == b010010)
{
if (rn != b1101)
- result = armv7_read_instr_stmdb_stmfd(raw);
+ result = armv7_read_arm_instr_stmdb_stmfd(raw);
else /* if (rn == b1101) */
- result = armv7_read_instr_push(raw);
+ result = armv7_read_arm_instr_push(raw);
}
else if ((op & b111101) == b010001)
- result = armv7_read_instr_ldmdb_ldmea(raw);
+ result = armv7_read_arm_instr_ldmdb_ldmea(raw);
else if ((op & b111101) == b011000)
- result = armv7_read_instr_stmib_stmfa(raw);
+ result = armv7_read_arm_instr_stmib_stmfa(raw);
else if ((op & b111101) == b011001)
- result = armv7_read_instr_ldmib_ldmed(raw);
+ result = armv7_read_arm_instr_ldmib_ldmed(raw);
else if ((op & b100101) == b000100)
- result = armv7_read_instr_stm_user_registers(raw);
+ result = armv7_read_arm_instr_stm_user_registers(raw);
else if ((op & b100101) == b000101)
{
if (r == b0)
- result = armv7_read_instr_ldm_user_registers(raw);
+ result = armv7_read_arm_instr_ldm_user_registers(raw);
else /* if (r == b1) */
- result = armv7_read_instr_ldm_exception_return(raw);
+ result = armv7_read_arm_instr_ldm_exception_return(raw);
}
else if ((op & b110000) == b100000)
- result = armv7_read_instr_b(raw);
+ result = armv7_read_arm_instr_b(raw);
else if ((op & b110000) == b110000)
- result = armv7_read_instr_bl_blx_immediate(raw);
+ result = armv7_read_arm_instr_bl_blx_immediate(raw);
return result;