Clock: Make Tick unsigned and remove UTick
authorAndreas Hansson <andreas.hansson@arm.com>
Tue, 21 Aug 2012 09:49:09 +0000 (05:49 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Tue, 21 Aug 2012 09:49:09 +0000 (05:49 -0400)
This patch makes the Tick unsigned and removes the UTick typedef. The
ticks should never be negative, and there was only one major issue
with removing it, caused by the o3 CPU using a -1 as an initial value.

The patch has no impact on any regressions.

src/base/types.hh
src/cpu/o3/cpu.cc
src/sim/eventq.hh

index 3105059ed4110865f2d7970f10fd8544cc0b53e4..ba6d53ad7ec1707ab285ec0ae4ac21e0213282bc 100644 (file)
 typedef int64_t Counter;
 
 /**
- * Clock cycle count type.
- * @note using an unsigned breaks the cache.
+ * Tick count type.
  */
-typedef int64_t Tick;
-typedef uint64_t UTick;
+typedef uint64_t Tick;
 
-const Tick MaxTick = LL(0x7fffffffffffffff);
+const Tick MaxTick = ULL(0xffffffffffffffff);
 
 /**
  * Address type
index 64c54e26ac3cca33d1ef891324cbe87c2d633644..71d04740cbaa2013b448fcdab1074294c418e5fe 100644 (file)
@@ -388,7 +388,7 @@ FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params)
 
     lastRunningCycle = curTick();
 
-    lastActivatedCycle = -1;
+    lastActivatedCycle = 0;
 #if 0
     // Give renameMap & rename stage access to the freeList;
     for (ThreadID tid = 0; tid < numThreads; tid++)
@@ -752,7 +752,9 @@ FullO3CPU<Impl>::activateContext(ThreadID tid, int delay)
         activateThread(tid);
     }
 
-    if (lastActivatedCycle < curTick()) {
+    // If we are time 0 or if the last activation time is in the past,
+    // schedule the next tick and wake up the fetch unit
+    if (lastActivatedCycle == 0 || lastActivatedCycle < curTick()) {
         scheduleTickEvent(delay);
 
         // Be sure to signal that there's some activity so the CPU doesn't
index 09483f4e205461eac39547959def8372c295a4aa..c4690288990e24d90955f8c9dde7aab27dd62cda 100644 (file)
@@ -481,9 +481,7 @@ class EventManager
 inline void
 EventQueue::schedule(Event *event, Tick when)
 {
-    // Typecasting Tick->Utick here since gcc
-    // complains about signed overflow
-    assert((UTick)when >= (UTick)curTick());
+    assert(when >= curTick());
     assert(!event->scheduled());
     assert(event->initialized());
 
@@ -520,9 +518,7 @@ EventQueue::deschedule(Event *event)
 inline void
 EventQueue::reschedule(Event *event, Tick when, bool always)
 {
-    // Typecasting Tick->Utick here since gcc
-    // complains about signed overflow
-    assert((UTick)when >= (UTick)curTick());
+    assert(when >= curTick());
     assert(always || event->scheduled());
     assert(event->initialized());