cpu: Update DRAM traffic gen
[gem5.git] / src / cpu / inorder / resources / mult_div_unit.hh
index cf0eed7390dcc0d661a4265ace0cf643e3f09cc9..d855dbb9d98767227e378a6d08b0f28867f992ac 100644 (file)
 #ifndef __CPU_INORDER_MULT_DIV_UNIT_HH__
 #define __CPU_INORDER_MULT_DIV_UNIT_HH__
 
-#include <vector>
 #include <list>
 #include <string>
+#include <vector>
 
-#include "cpu/func_unit.hh"
-#include "cpu/op_class.hh"
 #include "cpu/inorder/first_stage.hh"
-#include "cpu/inorder/resource.hh"
 #include "cpu/inorder/inorder_dyn_inst.hh"
+#include "cpu/inorder/resource.hh"
+#include "cpu/func_unit.hh"
+#include "cpu/op_class.hh"
 
 class MDUEvent;
 
@@ -56,53 +56,53 @@ class MultDivUnit : public Resource {
 
   public:
     MultDivUnit(std::string res_name, int res_id, int res_width,
-              int res_latency, InOrderCPU *_cpu, ThePipeline::Params *params);
+                Cycles res_latency, InOrderCPU *_cpu,
+                ThePipeline::Params *params);
 
   public:
     /** Override default Resource getSlot(). Will only getSlot if
      *  valid mult/div sequence is being maintained
      */
-    virtual int getSlot(DynInstPtr inst);
-
-    virtual int findSlot(DynInstPtr inst);
-
-    virtual void freeSlot(int slot_idx);
+    int getSlot(DynInstPtr inst);
     
-    virtual void init();
+    void init();
     
     /** Get Operand Size For A Division Operation */
     int getDivOpSize(DynInstPtr inst);
 
     /** Override default Resource execute */
-    virtual void execute(int slot_num);
+    void execute(int slot_num);
 
     void exeMulDiv(int slot_num);    
     
     /** Register extra resource stats */
-    virtual void regStats();
+    void regStats();
 
     void requestAgain(DynInstPtr inst, bool &try_request);
 
+    void squash(DynInstPtr inst, int stage_num, InstSeqNum squash_seq_num,
+                ThreadID tid);
+
   protected:
     /** Latency & Repeat Rate for Multiply Insts */
     unsigned multRepeatRate;
-    unsigned multLatency;
+    Cycles multLatency;
 
     /** Latency & Repeat Rate for 8-bit Divide Insts */
     unsigned div8RepeatRate;
-    unsigned div8Latency;
+    Cycles div8Latency;
 
     /** Latency & Repeat Rate for 16-bit Divide Insts */
     unsigned div16RepeatRate;
-    unsigned div16Latency;
+    Cycles div16Latency;
 
     /** Latency & Repeat Rate for 24-bit Divide Insts */
     unsigned div24RepeatRate;
-    unsigned div24Latency;
+    Cycles div24Latency;
 
     /** Latency & Repeat Rate for 32-bit Divide Insts */
     unsigned div32RepeatRate;
-    unsigned div32Latency;
+    Cycles div32Latency;
 
     /** Last cycle that MDU was used */
     Tick lastMDUCycle;
@@ -129,10 +129,10 @@ class MDUEvent : public ResourceEvent
 {
   public:
     MDUEvent();
-    virtual ~MDUEvent() { }
+    ~MDUEvent() { }
     
 
-    virtual void process();    
+    void process();
 };