- disable strict alignment on LDRD/STRD
- handle RD in STREX/STREXB
This commit is contained in:
		| @@ -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); */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user