|
From: <sv...@va...> - 2011-10-26 15:11:10
|
Author: sewardj
Date: 2011-10-26 16:06:25 +0100 (Wed, 26 Oct 2011)
New Revision: 2227
Log:
Handle "add.w reg, sp, #constT" and "addw reg, sp, #uimm12" for reg !=
PC. Previous handling was overly restrictive -- only allowed
reg == SP. (n-i-bz)
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
===================================================================
--- trunk/priv/guest_arm_toIR.c 2011-10-25 09:10:58 UTC (rev 2226)
+++ trunk/priv/guest_arm_toIR.c 2011-10-26 15:06:25 UTC (rev 2227)
@@ -16077,8 +16077,8 @@
UInt rN = INSN0(3,0);
UInt rD = INSN1(11,8);
Bool valid = !isBadRegT(rN) && !isBadRegT(rD);
- /* but allow "add.w reg, sp, #constT" */
- if (!valid && rN == 13 && rD != 15)
+ /* but allow "add.w reg, sp, #constT" for reg != PC */
+ if (!valid && rD <= 14 && rN == 13)
valid = True;
if (valid) {
IRTemp argL = newTemp(Ity_I32);
@@ -16104,8 +16104,8 @@
UInt rN = INSN0(3,0);
UInt rD = INSN1(11,8);
Bool valid = !isBadRegT(rN) && !isBadRegT(rD);
- /* but allow "addw sp, sp, #uimm12" */
- if (!valid && rD == 13 && rN == 13)
+ /* but allow "addw reg, sp, #uimm12" for reg != PC */
+ if (!valid && rD <= 14 && rN == 13)
valid = True;
if (valid) {
IRTemp argL = newTemp(Ity_I32);
|