From: Korey Sewell Date: Fri, 18 Feb 2011 19:29:02 +0000 (-0500) Subject: inorder: remove events for zero-cycle resources X-Git-Tag: stable_2012_02_02~553^2~13 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72b5233112a41cb879ca63866f9f0ecf8638dbfb;p=gem5.git inorder: remove events for zero-cycle resources if a resource has a zero cycle latency (e.g. RegFile write), then dont allocate an event for it to use --- diff --git a/src/cpu/inorder/resource.cc b/src/cpu/inorder/resource.cc index 076084d16..c371f8244 100644 --- a/src/cpu/inorder/resource.cc +++ b/src/cpu/inorder/resource.cc @@ -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); + } } } diff --git a/src/cpu/inorder/resources/use_def.cc b/src/cpu/inorder/resources/use_def.cc index 85bf14500..19246a30b 100644 --- a/src/cpu/inorder/resources/use_def.cc +++ b/src/cpu/inorder/resources/use_def.cc @@ -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);