arch: Get rid of the unused GenericTLB.
[gem5.git] / src / cpu / func_unit.hh
index 7801430969ed8547260b78fe0246ef17c4d602df..6381955091c4deba5fa1f2f4563e51d3c19d4850 100644 (file)
 #ifndef __CPU_FUNC_UNIT_HH__
 #define __CPU_FUNC_UNIT_HH__
 
+#include <array>
 #include <bitset>
 #include <string>
 #include <vector>
 
 #include "cpu/op_class.hh"
+#include "params/FUDesc.hh"
+#include "params/OpDesc.hh"
 #include "sim/sim_object.hh"
 
 ////////////////////////////////////////////////////////////////////////////
 //
 //
 
-struct OpDesc : public SimObject
+class OpDesc : public SimObject
 {
+  public:
     OpClass opClass;
-    unsigned    opLat;
-    unsigned    issueLat;
+    Cycles opLat;
+    bool pipelined;
 
-    OpDesc(std::string name, OpClass c, unsigned o, unsigned i)
-        : SimObject(name), opClass(c), opLat(o), issueLat(i) {};
+    OpDesc(const OpDescParams *p)
+        : SimObject(p), opClass(p->opClass), opLat(p->opLat),
+          pipelined(p->pipelined) {};
 };
 
-struct FUDesc : public SimObject
+class FUDesc : public SimObject
 {
+  public:
     std::vector<OpDesc *> opDescList;
     unsigned         number;
 
-    FUDesc(std::string name, std::vector<OpDesc *> l, unsigned n)
-        : SimObject(name), opDescList(l), number(n) {};
+    FUDesc(const FUDescParams *p)
+        : SimObject(p), opDescList(p->opList), number(p->count) {};
 };
 
-typedef std::vector<OpDesc *>::iterator OPDDiterator;
-typedef std::vector<FUDesc *>::iterator FUDDiterator;
+typedef std::vector<OpDesc *>::const_iterator OPDDiterator;
+typedef std::vector<FUDesc *>::const_iterator FUDDiterator;
 
 
 
@@ -79,8 +85,8 @@ typedef std::vector<FUDesc *>::iterator FUDDiterator;
 class FuncUnit
 {
   private:
-    unsigned opLatencies[Num_OpClasses];
-    unsigned issueLatencies[Num_OpClasses];
+    std::array<unsigned, Num_OpClasses> opLatencies;
+    std::array<bool, Num_OpClasses> pipelined;
     std::bitset<Num_OpClasses> capabilityList;
 
   public:
@@ -89,13 +95,13 @@ class FuncUnit
 
     std::string name;
 
-    void addCapability(OpClass cap, unsigned oplat, unsigned issuelat);
+    void addCapability(OpClass cap, unsigned oplat, bool pipelined);
 
     bool provides(OpClass capability);
     std::bitset<Num_OpClasses> capabilities();
 
     unsigned &opLatency(OpClass capability);
-    unsigned issueLatency(OpClass capability);
+    bool isPipelined(OpClass capability);
 };
 
 #endif // __FU_POOL_HH__