inorder: remove events for zero-cycle resources
authorKorey Sewell <ksewell@umich.edu>
Fri, 18 Feb 2011 19:29:02 +0000 (14:29 -0500)
committerKorey Sewell <ksewell@umich.edu>
Fri, 18 Feb 2011 19:29:02 +0000 (14:29 -0500)
if a resource has a zero cycle latency (e.g. RegFile write), then dont allocate an event
for it to use

src/cpu/inorder/resource.cc
src/cpu/inorder/resources/use_def.cc

index 076084d16e9444b85d2aea7409fe1fb583db8808..c371f8244cc3c82843563c0c1aa836a25a6d569c 100644 (file)
@@ -49,7 +49,10 @@ Resource::Resource(string res_name, int res_id, int res_width,
 
 Resource::~Resource()
 {
-    delete [] resourceEvent;
+    if (resourceEvent) {
+        delete [] resourceEvent;
+    }
+
     delete deniedReq;    
 }
 
@@ -57,8 +60,14 @@ Resource::~Resource()
 void
 Resource::init()
 {
-    // Set Up Resource Events to Appropriate Resource BandWidth
-    resourceEvent = new ResourceEvent[width];
+    // If the resource has a zero-cycle (no latency)
+    // function, then no reason to have events
+    // that will process them for the right tick
+    if (latency > 0) {
+        resourceEvent = new ResourceEvent[width];
+    } else {
+        resourceEvent = NULL;
+    }
 
     for (int i = 0; i < width; i++) {
         reqs[i] = new ResourceRequest(this);
@@ -73,7 +82,10 @@ Resource::initSlots()
     // Add available slot numbers for resource
     for (int slot_idx = 0; slot_idx < width; slot_idx++) {
         availSlots.push_back(slot_idx);
-        resourceEvent[slot_idx].init(this, slot_idx);
+
+        if (resourceEvent) {
+            resourceEvent[slot_idx].init(this, slot_idx);
+        }
     }
 }
 
index 85bf14500eca20140c4151a08ea981b3363b4c24..19246a30bd76a39ad089e5c8736ed7afe356af8f 100644 (file)
@@ -92,7 +92,11 @@ void
 UseDefUnit::init()
 {
     // Set Up Resource Events to Appropriate Resource BandWidth
-    resourceEvent = new ResourceEvent[width];
+    if (latency > 0) {
+        resourceEvent = new ResourceEvent[width];
+    } else {
+        resourceEvent = NULL;
+    }
 
     for (int i = 0; i < width; i++) {
         reqs[i] = new UseDefRequest(this);