|
|
|
@ -5536,14 +5536,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr) |
|
|
|
addr = base; |
|
|
|
|
|
|
|
/* 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,
|
|
|
|
check that the destination registers do not overlap |
|
|
|
@ -5640,14 +5641,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr) |
|
|
|
addr = base; |
|
|
|
|
|
|
|
/* 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,
|
|
|
|
check that the destination registers do not overlap |
|
|
|
@ -6405,6 +6407,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) |
|
|
|
if (state->Aborted) { |
|
|
|
TAKEABORT; |
|
|
|
} |
|
|
|
// FIX(Normmatt): Handle RD in STREX/STREXB
|
|
|
|
state->Reg[DESTReg] = 0; //Always succeed
|
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
@ -6432,7 +6436,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) |
|
|
|
if (state->Aborted) { |
|
|
|
TAKEABORT; |
|
|
|
} |
|
|
|
|
|
|
|
// FIX(Normmatt): Handle RD in STREX/STREXB
|
|
|
|
state->Reg[DESTReg] = 0; //Always succeed
|
|
|
|
//printf("In %s, strexb not implemented\n", __FUNCTION__);
|
|
|
|
UNDEF_LSRBPC; |
|
|
|
/* WRITESDEST (dest); */ |
|
|
|
|