From a75eded48531356ae03f37ddc1082223c72c85bf Mon Sep 17 00:00:00 2001 From: Zaneo Date: Sat, 2 Apr 2016 03:10:55 -0400 Subject: [PATCH] ARM:Disassembler Better differentiate TEQ from MSR --- src/core/arm/disassembler/arm_disasm.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/arm/disassembler/arm_disasm.cpp b/src/core/arm/disassembler/arm_disasm.cpp index 5ad1f1c29..9b433471f 100644 --- a/src/core/arm/disassembler/arm_disasm.cpp +++ b/src/core/arm/disassembler/arm_disasm.cpp @@ -1500,6 +1500,9 @@ Opcode ARM_Disasm::DecodeALU(u32 insn) { u8 is_immed = (insn >> 25) & 0x1; u8 opcode = (insn >> 21) & 0xf; u8 bit_s = (insn >> 20) & 1; + u8 msr_15_12 = (insn >> 12) & 0xF; + u8 msr_11_8 = (insn >> 8) & 0xF; + u8 msr_7_4 = (insn >> 4) & 0xF; u8 shift_is_reg = (insn >> 4) & 1; u8 bit7 = (insn >> 7) & 1; if (!is_immed && shift_is_reg && (bit7 != 0)) { @@ -1529,9 +1532,9 @@ Opcode ARM_Disasm::DecodeALU(u32 insn) { return OP_TST; return OP_MRS; case 0x9: - if (bit_s) - return OP_TEQ; - return OP_MSR; + if (msr_15_12 == 0xf && msr_11_8 == 0 && msr_7_4 == 0) + return OP_MSR; + return OP_TEQ; case 0xa: if (bit_s) return OP_CMP;