mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 22:57:22 +00:00
- disable strict alignment on LDRD/STRD
- handle RD in STREX/STREXB
This commit is contained in:
parent
9db26df05f
commit
d1472b816f
1 changed files with 22 additions and 17 deletions
|
@ -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); */
|
||||
|
|
Loading…
Reference in a new issue