X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcpu%2Finorder%2Fresource_pool.hh;h=e892d750af7c1b74d77e7c18f088772c0dbe9d6b;hb=39f314cc151b0a05ee0e654d52bad1c906fac668;hp=e8061d3ffa163bd36290980048bea4d2c1803b6e;hpb=71b67d408bb595471a57dbe8e40cf5ac82c5d3b7;p=gem5.git diff --git a/src/cpu/inorder/resource_pool.hh b/src/cpu/inorder/resource_pool.hh index e8061d3ff..e892d750a 100644 --- a/src/cpu/inorder/resource_pool.hh +++ b/src/cpu/inorder/resource_pool.hh @@ -32,17 +32,17 @@ #ifndef __CPU_INORDER_RESOURCE_POOL_HH__ #define __CPU_INORDER_RESOURCE_POOL_HH__ -#include #include #include +#include -#include "cpu/inst_seq.hh" +#include "cpu/inorder/cpu.hh" #include "cpu/inorder/inorder_dyn_inst.hh" -#include "cpu/inorder/resource.hh" -#include "cpu/inorder/pipeline_traits.hh" #include "cpu/inorder/params.hh" +#include "cpu/inorder/pipeline_traits.hh" +#include "cpu/inorder/resource.hh" +#include "cpu/inst_seq.hh" #include "params/InOrderCPU.hh" -#include "cpu/inorder/cpu.hh" #include "sim/eventq.hh" #include "sim/sim_object.hh" @@ -67,6 +67,12 @@ class ResourcePool { Default }; + enum ResPoolEventPri { + ResPool_Pri = InOrderCPU::InOrderCPU_Pri - 5, + ResGrad_Pri, + ResSquash_Pri + }; + class ResPoolEvent : public Event { protected: @@ -91,7 +97,8 @@ class ResourcePool { DynInstPtr _inst, int stage_num, InstSeqNum seq_num, - ThreadID _tid); + ThreadID _tid, + ResPoolEventPri res_pri = ResPool_Pri); /** Set Type of Event To Be Scheduled */ void setEvent(InOrderCPU::CPUEventType e_type, @@ -122,7 +129,7 @@ class ResourcePool { public: ResourcePool(InOrderCPU *_cpu, ThePipeline::Params *params); - ~ResourcePool(); + virtual ~ResourcePool(); std::string name(); @@ -130,6 +137,8 @@ class ResourcePool { void init(); + void print(); + /** Register Statistics in All Resources */ void regStats(); @@ -166,13 +175,13 @@ class ResourcePool { InstSeqNum done_seq_num, ThreadID tid); /** Activate Thread in all resources */ - void activateAll(ThreadID tid); + void activateThread(ThreadID tid); /** De-Activate Thread in all resources */ - void deactivateAll(ThreadID tid); + void deactivateThread(ThreadID tid); - /** De-Activate Thread in all resources */ - void suspendAll(ThreadID tid); + /** Suspend Thread in all resources */ + void suspendThread(ThreadID tid); /** Broadcast Context Switch Update to all resources */ void updateAfterContextSwitch(DynInstPtr inst, ThreadID tid); @@ -180,6 +189,9 @@ class ResourcePool { /** Broadcast graduation to all resources */ void instGraduated(InstSeqNum seq_num, ThreadID tid); + /** Broadcast trap to all resources */ + void trap(Fault fault, ThreadID tid, DynInstPtr inst); + /** The number of instructions available that a resource can * can still process. */ @@ -206,8 +218,11 @@ class ResourcePool { private: std::vector resources; + /** Resources that interface with memory objects */ std::vector memObjects; + /** Resources that need to be updated on an inst. graduation */ + std::vector gradObjects; }; #endif //__CPU_INORDER_RESOURCE_HH__