summaryrefslogtreecommitdiff
path: root/src/core/arm/interpreter/armemu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/arm/interpreter/armemu.cpp')
-rw-r--r--src/core/arm/interpreter/armemu.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index a35c5c8dc..1af684fe3 100644
--- a/src/core/arm/interpreter/armemu.cpp
+++ b/src/core/arm/interpreter/armemu.cpp
@@ -5536,14 +5536,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr)
5536 addr = base; 5536 addr = base;
5537 5537
5538 /* The address must be aligned on a 8 byte boundary. */ 5538 /* The address must be aligned on a 8 byte boundary. */
5539 if (addr & 0x7) { 5539 // FIX(Normatt): Disable strict alignment on LDRD/STRD
5540#ifdef ABORTS 5540// if (addr & 0x7) {
5541 ARMul_DATAABORT (addr); 5541//#ifdef ABORTS
5542#else 5542// ARMul_DATAABORT (addr);
5543 ARMul_UndefInstr (state, instr); 5543//#else
5544#endif 5544// ARMul_UndefInstr (state, instr);
5545 return; 5545//#endif
5546 } 5546// return;
5547// }
5547 5548
5548 /* For pre indexed or post indexed addressing modes, 5549 /* For pre indexed or post indexed addressing modes,
5549 check that the destination registers do not overlap 5550 check that the destination registers do not overlap
@@ -5640,14 +5641,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr)
5640 addr = base; 5641 addr = base;
5641 5642
5642 /* The address must be aligned on a 8 byte boundary. */ 5643 /* The address must be aligned on a 8 byte boundary. */
5643 if (addr & 0x7) { 5644 // FIX(Normatt): Disable strict alignment on LDRD/STRD
5644#ifdef ABORTS 5645// if (addr & 0x7) {
5645 ARMul_DATAABORT (addr); 5646//#ifdef ABORTS
5646#else 5647// ARMul_DATAABORT (addr);
5647 ARMul_UndefInstr (state, instr); 5648//#else
5648#endif 5649// ARMul_UndefInstr (state, instr);
5649 return; 5650//#endif
5650 } 5651// return;
5652// }
5651 5653
5652 /* For pre indexed or post indexed addressing modes, 5654 /* For pre indexed or post indexed addressing modes,
5653 check that the destination registers do not overlap 5655 check that the destination registers do not overlap
@@ -6405,6 +6407,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr)
6405 if (state->Aborted) { 6407 if (state->Aborted) {
6406 TAKEABORT; 6408 TAKEABORT;
6407 } 6409 }
6410 // FIX(Normmatt): Handle RD in STREX/STREXB
6411 state->Reg[DESTReg] = 0; //Always succeed
6408 6412
6409 return 1; 6413 return 1;
6410 } 6414 }
@@ -6432,7 +6436,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr)
6432 if (state->Aborted) { 6436 if (state->Aborted) {
6433 TAKEABORT; 6437 TAKEABORT;
6434 } 6438 }
6435 6439 // FIX(Normmatt): Handle RD in STREX/STREXB
6440 state->Reg[DESTReg] = 0; //Always succeed
6436 //printf("In %s, strexb not implemented\n", __FUNCTION__); 6441 //printf("In %s, strexb not implemented\n", __FUNCTION__);
6437 UNDEF_LSRBPC; 6442 UNDEF_LSRBPC;
6438 /* WRITESDEST (dest); */ 6443 /* WRITESDEST (dest); */