#ifndef __CPU_INORDER_RESOURCE_POOL_HH__
#define __CPU_INORDER_RESOURCE_POOL_HH__
-#include <vector>
#include <list>
#include <string>
+#include <vector>
-#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"
Default
};
+ enum ResPoolEventPri {
+ ResPool_Pri = InOrderCPU::InOrderCPU_Pri - 5,
+ ResGrad_Pri,
+ ResSquash_Pri
+ };
+
class ResPoolEvent : public Event
{
protected:
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,
public:
ResourcePool(InOrderCPU *_cpu, ThePipeline::Params *params);
- ~ResourcePool();
+ virtual ~ResourcePool();
std::string name();
void init();
+ void print();
+
/** Register Statistics in All Resources */
void regStats();
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);
/** 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.
*/
private:
std::vector<Resource *> resources;
+ /** Resources that interface with memory objects */
std::vector<int> memObjects;
+ /** Resources that need to be updated on an inst. graduation */
+ std::vector<int> gradObjects;
};
#endif //__CPU_INORDER_RESOURCE_HH__