arch-arm: fix ldm of pc interswitching branch
The LDM instruction that loads to the PC causes a branch to the instruction. In ARMv5T+ the branch can interswitch Thumb and ARM modes. The interswitch is broken prior to this commit, with LDM to the PC ignoring the switch. Change-Id: I6aad073206743f3435c9923e3e2218bfe32c7e05 Reviewed-on: https://gem5-review.googlesource.com/3520 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
@@ -58,7 +58,8 @@ let {{
|
||||
microLdr2UopCode = '''
|
||||
uint64_t data = Mem_ud;
|
||||
Dest = cSwap((uint32_t) data, ((CPSR)Cpsr).e);
|
||||
Dest2 = cSwap((uint32_t) (data >> 32), ((CPSR)Cpsr).e);
|
||||
IWDest2 = cSwap((uint32_t) (data >> 32),
|
||||
((CPSR)Cpsr).e);
|
||||
'''
|
||||
microLdr2UopIop = InstObjParams('ldr2_uop', 'MicroLdr2Uop',
|
||||
'MicroMemPairOp',
|
||||
|
||||
@@ -193,6 +193,7 @@ def operands {{
|
||||
'Dest2': intReg('dest2'),
|
||||
'XDest2': intRegX64('dest2'),
|
||||
'FDest2': floatReg('dest2'),
|
||||
'IWDest2': intRegIWPC('dest2'),
|
||||
'Result': intReg('result'),
|
||||
'XResult': intRegX64('result'),
|
||||
'XBase': intRegX64('base', id = srtBase),
|
||||
|
||||
Reference in New Issue
Block a user