Fix some problems with stats reset & floss counters.
authorSteve Reinhardt <stever@eecs.umich.edu>
Mon, 27 Oct 2003 06:37:14 +0000 (22:37 -0800)
committerSteve Reinhardt <stever@eecs.umich.edu>
Mon, 27 Oct 2003 06:37:14 +0000 (22:37 -0800)
arch/alpha/isa_desc:
    Keep m5 pseudo-instructions (like resetstats) from taking effect
    on misspeculated paths.

--HG--
extra : convert_revision : 7f0b0490164bca377ff2b14abc35a6c26bac9e6d

arch/alpha/isa_desc

index 3a0c1bffe134fddb94d67f45f1575bd976e8dba9..89ec05c0e26a5c3e17e8614160128d5ffbd06903 100644 (file)
@@ -2388,27 +2388,39 @@ decode OPCODE default Unknown::unknown() {
        0x1e: hw_rei({{ xc->hwrei(); }});
 
        // M5 special opcodes use the reserved 0x01 opcode space
-       0x01: decode M5FUNC{
+       0x01: decode M5FUNC {
            0x00: arm({{
-               Annotate::ARM(xc);
-               xc->kernelStats.arm();
+               if (!xc->misspeculating()) {
+                   Annotate::ARM(xc);
+                   xc->kernelStats.arm();
+               }
            }});
            0x01: quiesce({{
-               Annotate::QUIESCE(xc);
-               xc->setStatus(ExecContext::Suspended);
-               xc->kernelStats.quiesce();
+               if (!xc->misspeculating()) {
+                   Annotate::QUIESCE(xc);
+                   xc->setStatus(ExecContext::Suspended);
+                   xc->kernelStats.quiesce();
+               }
            }});
            0x10: ivlb({{
-               Annotate::BeginInterval(xc);
-               xc->kernelStats.ivlb();
+               if (!xc->misspeculating()) {
+                   Annotate::BeginInterval(xc);
+                   xc->kernelStats.ivlb();
+               }
+           }}, No_OpClass);
+           0x11: ivle({{
+               if (!xc->misspeculating())
+                   Annotate::EndInterval(xc);
            }}, No_OpClass);
-           0x11: ivle({{ Annotate::EndInterval(xc); }}, No_OpClass);
            0x20: m5exit({{
                if (!xc->misspeculating())
                    m5_exit();
            }}, No_OpClass);
             0x30: initparam({{ Ra = xc->cpu->system->init_param; }});
-            0x40: resetstats({{ Statistics::reset(); }});
+            0x40: resetstats({{
+               if (!xc->misspeculating())
+                   Statistics::reset();
+           }});
        }
     }