|
From: <sv...@va...> - 2010-01-03 01:21:14
|
Author: sewardj
Date: 2010-01-03 01:20:59 +0000 (Sun, 03 Jan 2010)
New Revision: 1953
Log:
Don't force alignment for LDMxx/STMxx when presented with a misaligned
address; instead just press on regardless.
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
===================================================================
--- trunk/priv/guest_arm_toIR.c 2010-01-02 13:23:54 UTC (rev 1952)
+++ trunk/priv/guest_arm_toIR.c 2010-01-03 01:20:59 UTC (rev 1953)
@@ -2418,7 +2418,13 @@
assign(oldRnT, getIReg(rN));
IRTemp anchorT = newTemp(Ity_I32);
- assign(anchorT, binop(Iop_And32, mkexpr(oldRnT), mkU32(~3U)));
+ /* The old (Addison-Wesley) ARM ARM seems to say that
+ LDMxx/STMxx ignore the bottom two bits of the address.
+ However, Cortex-A8 doesn't seem to care. Hence: */
+ /* No .. don't force alignment .. */
+ /* assign(anchorT, binop(Iop_And32, mkexpr(oldRnT), mkU32(~3U))); */
+ /* Instead, use the potentially misaligned address directly. */
+ assign(anchorT, mkexpr(oldRnT));
IROp opADDorSUB = bINC ? Iop_Add32 : Iop_Sub32;
// bINC == 1: xxMIA, xxMIB
|