summaryrefslogtreecommitdiff
path: root/src/vm/arm/armsinglestepper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/arm/armsinglestepper.cpp')
-rw-r--r--src/vm/arm/armsinglestepper.cpp15
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