ARM: Make ldrs into the PC and ldm exception return do interworking branches.
This commit is contained in:
@@ -90,7 +90,7 @@ let {{
|
||||
eaCode += offset
|
||||
eaCode += ";"
|
||||
|
||||
accCode = "Dest = Mem%s;\n" % buildMemSuffix(sign, size)
|
||||
accCode = "IWDest = Mem%s;\n" % buildMemSuffix(sign, size)
|
||||
if writeback:
|
||||
accCode += "Base = Base %s;\n" % offset
|
||||
base = buildMemBase("MemoryImm", post, writeback)
|
||||
@@ -115,7 +115,7 @@ let {{
|
||||
eaCode += offset
|
||||
eaCode += ";"
|
||||
|
||||
accCode = "Dest = Mem%s;\n" % buildMemSuffix(sign, size)
|
||||
accCode = "IWDest = Mem%s;\n" % buildMemSuffix(sign, size)
|
||||
if writeback:
|
||||
accCode += "Base = Base %s;\n" % offset
|
||||
base = buildMemBase("MemoryReg", post, writeback)
|
||||
|
||||
@@ -66,11 +66,11 @@ let {{
|
||||
['IsMicroop'])
|
||||
|
||||
microLdrRetUopCode = '''
|
||||
Ra = Mem;
|
||||
uint32_t newCpsr =
|
||||
cpsrWriteByInstr(Cpsr | CondCodes, Spsr, 0xF, true);
|
||||
Cpsr = ~CondCodesMask & newCpsr;
|
||||
CondCodes = CondCodesMask & newCpsr;
|
||||
IWNPC = Mem | ((Spsr & 0x20) ? 1 : 0);
|
||||
'''
|
||||
microLdrRetUopIop = InstObjParams('ldr_ret_uop', 'MicroLdrRetUop',
|
||||
'MicroMemOp',
|
||||
|
||||
Reference in New Issue
Block a user