ARM: Fix issue with predicted next pc being wrong because of advance() ordering.
authorAli Saidi <Ali.Saidi@ARM.com>
Fri, 29 Jun 2012 15:18:28 +0000 (11:18 -0400)
committerAli Saidi <Ali.Saidi@ARM.com>
Fri, 29 Jun 2012 15:18:28 +0000 (11:18 -0400)
npc in PCState for ARM was being calculated before the current flags were
updated with the next flags. This causes an issue as the npc is incremented by
two or four depending on the current flags (thumb or not) and was leading to
branches that were predicted correctly being identified as mispredicted.

src/arch/arm/types.hh

index ebebbcc460315d556144085b20e3c9abbaa7dd23..cd0b74b2d46f24e2a88017ce9c736548d2897fa7 100644 (file)
@@ -332,8 +332,8 @@ namespace ArmISA
         advance()
         {
             Base::advance();
-            npc(pc() + (thumb() ? 2 : 4));
             flags = nextFlags;
+            npc(pc() + (thumb() ? 2 : 4));
 
             if (_nextItstate) {
                 _itstate = _nextItstate;