diff options
Diffstat (limited to 'src/arch/arm/isa/insts/ldr.isa')
-rw-r--r-- | src/arch/arm/isa/insts/ldr.isa | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/arch/arm/isa/insts/ldr.isa b/src/arch/arm/isa/insts/ldr.isa index 21601f7d3..c60a91a50 100644 --- a/src/arch/arm/isa/insts/ldr.isa +++ b/src/arch/arm/isa/insts/ldr.isa @@ -107,13 +107,15 @@ let {{ SCTLR sctlr = Sctlr; // Use the version of NPC that gets set before NextThumb pNPC = cSwap<uint32_t>(Mem.ud, cpsr.e); + uint32_t tempSpsr = cSwap<uint32_t>(Mem.ud >> 32, cpsr.e); uint32_t newCpsr = - cpsrWriteByInstr(cpsr | CondCodes, - cSwap<uint32_t>(Mem.ud >> 32, cpsr.e), + cpsrWriteByInstr(cpsr | CondCodes, tempSpsr, 0xF, true, sctlr.nmfi); Cpsr = ~CondCodesMask & newCpsr; NextThumb = ((CPSR)newCpsr).t; NextJazelle = ((CPSR)newCpsr).j; + ForcedItState = ((((CPSR)tempSpsr).it2 << 2) & 0xFC) + | (((CPSR)tempSpsr).it1 & 0x3); CondCodes = CondCodesMask & newCpsr; ''' self.codeBlobs["memacc_code"] = accCode |