summaryrefslogtreecommitdiff
path: root/src/arch/arm/insts/static_inst.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/insts/static_inst.hh')
-rw-r--r--src/arch/arm/insts/static_inst.hh8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/arch/arm/insts/static_inst.hh b/src/arch/arm/insts/static_inst.hh
index 23c04306d..c0d313680 100644
--- a/src/arch/arm/insts/static_inst.hh
+++ b/src/arch/arm/insts/static_inst.hh
@@ -221,7 +221,13 @@ class ArmStaticInst : public StaticInst
static void
setNextPC(XC *xc, Addr val)
{
- xc->setNextPC((xc->readNextPC() & PcModeMask) |
+ Addr npc = xc->readNextPC();
+ if (npc & (ULL(1) << PcTBitShift)) {
+ val &= ~mask(1);
+ } else {
+ val &= ~mask(2);
+ }
+ xc->setNextPC((npc & PcModeMask) |
(val & ~PcModeMask));
}