diff options
Diffstat (limited to 'src/vm/arm/armsinglestepper.cpp')
-rw-r--r-- | src/vm/arm/armsinglestepper.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/vm/arm/armsinglestepper.cpp b/src/vm/arm/armsinglestepper.cpp index bfe88244f8..525e3bcf2b 100644 --- a/src/vm/arm/armsinglestepper.cpp +++ b/src/vm/arm/armsinglestepper.cpp @@ -1051,6 +1051,21 @@ bool ArmSingleStepper::TryEmulate(T_CONTEXT *pCtx, WORD opcode1, WORD opcode2, b fEmulated = true; } + else if ((opcode1 & 0xff00) == 0x4400) + { + // A8.8.6 ADD (register, Thumb) : T2 + DWORD Rm = BitExtract(opcode1, 6, 3); + + // We should only emulate this instruction if Pc is used + if (Rm == 15) + fEmulated = true; + + if (execute) + { + DWORD Rd = BitExtract(opcode1, 2, 0) | BitExtract(opcode1, 7, 7) << 3; + SetReg(pCtx, Rd, GetReg(pCtx, Rm) + GetReg(pCtx, Rd)); + } + } else if (((opcode1 & 0xf000) == 0xd000) && ((opcode1 & 0x0f00) != 0x0e00)) { // B : T1 |