|
@@ -5536,14 +5536,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr)
|
|
|
addr = base;
|
|
addr = base;
|
|
|
|
|
|
|
|
/* The address must be aligned on a 8 byte boundary. */
|
|
/* The address must be aligned on a 8 byte boundary. */
|
|
|
- if (addr & 0x7) {
|
|
|
|
|
-#ifdef ABORTS
|
|
|
|
|
- ARMul_DATAABORT (addr);
|
|
|
|
|
-#else
|
|
|
|
|
- ARMul_UndefInstr (state, instr);
|
|
|
|
|
-#endif
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // FIX(Normatt): Disable strict alignment on LDRD/STRD
|
|
|
|
|
+// if (addr & 0x7) {
|
|
|
|
|
+//#ifdef ABORTS
|
|
|
|
|
+// ARMul_DATAABORT (addr);
|
|
|
|
|
+//#else
|
|
|
|
|
+// ARMul_UndefInstr (state, instr);
|
|
|
|
|
+//#endif
|
|
|
|
|
+// return;
|
|
|
|
|
+// }
|
|
|
|
|
|
|
|
/* For pre indexed or post indexed addressing modes,
|
|
/* For pre indexed or post indexed addressing modes,
|
|
|
check that the destination registers do not overlap
|
|
check that the destination registers do not overlap
|
|
@@ -5640,14 +5641,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr)
|
|
|
addr = base;
|
|
addr = base;
|
|
|
|
|
|
|
|
/* The address must be aligned on a 8 byte boundary. */
|
|
/* The address must be aligned on a 8 byte boundary. */
|
|
|
- if (addr & 0x7) {
|
|
|
|
|
-#ifdef ABORTS
|
|
|
|
|
- ARMul_DATAABORT (addr);
|
|
|
|
|
-#else
|
|
|
|
|
- ARMul_UndefInstr (state, instr);
|
|
|
|
|
-#endif
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // FIX(Normatt): Disable strict alignment on LDRD/STRD
|
|
|
|
|
+// if (addr & 0x7) {
|
|
|
|
|
+//#ifdef ABORTS
|
|
|
|
|
+// ARMul_DATAABORT (addr);
|
|
|
|
|
+//#else
|
|
|
|
|
+// ARMul_UndefInstr (state, instr);
|
|
|
|
|
+//#endif
|
|
|
|
|
+// return;
|
|
|
|
|
+// }
|
|
|
|
|
|
|
|
/* For pre indexed or post indexed addressing modes,
|
|
/* For pre indexed or post indexed addressing modes,
|
|
|
check that the destination registers do not overlap
|
|
check that the destination registers do not overlap
|
|
@@ -6405,6 +6407,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr)
|
|
|
if (state->Aborted) {
|
|
if (state->Aborted) {
|
|
|
TAKEABORT;
|
|
TAKEABORT;
|
|
|
}
|
|
}
|
|
|
|
|
+ // FIX(Normmatt): Handle RD in STREX/STREXB
|
|
|
|
|
+ state->Reg[DESTReg] = 0; //Always succeed
|
|
|
|
|
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
@@ -6432,7 +6436,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr)
|
|
|
if (state->Aborted) {
|
|
if (state->Aborted) {
|
|
|
TAKEABORT;
|
|
TAKEABORT;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ // FIX(Normmatt): Handle RD in STREX/STREXB
|
|
|
|
|
+ state->Reg[DESTReg] = 0; //Always succeed
|
|
|
//printf("In %s, strexb not implemented\n", __FUNCTION__);
|
|
//printf("In %s, strexb not implemented\n", __FUNCTION__);
|
|
|
UNDEF_LSRBPC;
|
|
UNDEF_LSRBPC;
|
|
|
/* WRITESDEST (dest); */
|
|
/* WRITESDEST (dest); */
|