From c473bdb8916528be4ff896c5e9378e6200f68939 Mon Sep 17 00:00:00 2001 From: Gedare Bloom Date: Wed, 24 May 2017 18:35:50 -0400 Subject: 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 Reviewed-by: Andreas Sandberg --- src/arch/arm/isa/insts/macromem.isa | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/arch/arm/isa/insts') diff --git a/src/arch/arm/isa/insts/macromem.isa b/src/arch/arm/isa/insts/macromem.isa index cc7366e2b..6a33d1b9f 100644 --- a/src/arch/arm/isa/insts/macromem.isa +++ b/src/arch/arm/isa/insts/macromem.isa @@ -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', -- cgit v1.2.3