types: Move stuff for global types into src/base/types.hh
[gem5.git] / src / sim / simulate.cc
index 55cbb50a94240aec3d7d3b6aef6e20d1ae7592f2..2d3b84e0955c50505d22dc7f1fba9c1aa3fce1ee 100644 (file)
@@ -34,7 +34,7 @@
 #include "sim/stat_control.hh"
 #include "sim/async.hh"
 #include "sim/eventq.hh"
-#include "sim/host.hh"
+#include "base/types.hh"
 #include "sim/sim_events.hh"
 #include "sim/sim_exit.hh"
 #include "sim/simulate.hh"
@@ -47,7 +47,7 @@
 SimLoopExitEvent *
 simulate(Tick num_cycles)
 {
-    warn("Entering event queue @ %d.  Starting simulation...\n", curTick);
+    inform("Entering event queue @ %d.  Starting simulation...\n", curTick);
 
     if (num_cycles < 0)
         fatal("simulate: num_cycles must be >= 0 (was %d)\n", num_cycles);
@@ -56,8 +56,9 @@ simulate(Tick num_cycles)
     else
         num_cycles = curTick + num_cycles;
 
-    Event *limit_event;
-    limit_event = schedExitSimLoop("simulate() limit reached", num_cycles);
+    Event *limit_event =
+        new SimLoopExitEvent("simulate() limit reached", 0);
+    mainEventQueue.schedule(limit_event, num_cycles);
 
     while (1) {
         // there should always be at least one event (the SimLoopExitEvent
@@ -82,8 +83,8 @@ simulate(Tick num_cycles)
             // if we didn't hit limit_event, delete it
             if (se_event != limit_event) {
                 assert(limit_event->scheduled());
-                limit_event->deschedule();
-                delete limit_event;
+                limit_event->squash();
+                hack_once("be nice to actually delete the event here");
             }
 
             return se_event;
@@ -92,10 +93,9 @@ simulate(Tick num_cycles)
         if (async_event) {
             async_event = false;
             if (async_statdump || async_statreset) {
+                Stats::StatEvent(async_statdump, async_statreset);
                 async_statdump = false;
                 async_statreset = false;
-
-                Stats::StatEvent(async_statdump, async_statreset);
             }
 
             if (async_exit) {