StaticInst support for microcode
authorGabe Black <gblack@eecs.umich.edu>
Thu, 12 Oct 2006 21:32:02 +0000 (17:32 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 12 Oct 2006 21:32:02 +0000 (17:32 -0400)
--HG--
extra : convert_revision : c9e062637faf2166f0d36b914f3efa7f80626663

src/cpu/static_inst.cc
src/cpu/static_inst.hh

index c311d22825ff6d800d4069f2f8ea547eb4309432..cb4a7cdf7b6a8c33a7e085cf470825ca4b6435a9 100644 (file)
@@ -75,3 +75,10 @@ StaticInst::hasBranchTarget(Addr pc, ThreadContext *tc, Addr &tgt) const
     return false;
 }
 
+StaticInstPtr
+StaticInst::fetchMicroOp(MicroPC micropc)
+{
+    panic("StaticInst::fetchMicroOp() called on instruction "
+            "that is not microcoded.");
+}
+
index 578d14191451b0128c53722e3b44e618819237aa..523cfae40074fa377f470836c67df3e57ba25084 100644 (file)
@@ -67,6 +67,8 @@ namespace Trace {
     class InstRecord;
 }
 
+typedef uint32_t MicroPC;
+
 /**
  * Base, ISA-independent static instruction class.
  *
@@ -139,6 +141,14 @@ class StaticInstBase : public RefCounted
         IsIprAccess,    ///< Accesses IPRs
         IsUnverifiable, ///< Can't be verified by a checker
 
+        //Flags for microcode
+        IsMacroOp,      ///< Is a macroop containing microops
+        IsMicroOp,     ///< Is a microop
+        IsDelayedCommit,       ///< This microop doesn't commit right away
+        IsLastMicroOp, ///< This microop ends a microop sequence
+        //This flag doesn't do anything yet
+        IsMicroBranch, ///< This microop branches within the microcode for a macroop
+
         NumFlags
     };
 
@@ -230,6 +240,12 @@ class StaticInstBase : public RefCounted
     bool isQuiesce() const { return flags[IsQuiesce]; }
     bool isIprAccess() const { return flags[IsIprAccess]; }
     bool isUnverifiable() const { return flags[IsUnverifiable]; }
+    bool isMacroOp() const { return flags[IsMacroOp]; }
+    bool isMicroOp() const { return flags[IsMicroOp]; }
+    bool isDelayedCommit() const { return flags[IsDelayedCommit]; }
+    bool isLastMicroOp() const { return flags[IsLastMicroOp]; }
+    //This flag doesn't do anything yet
+    bool isMicroBranch() const { return flags[IsMicroBranch]; }
     //@}
 
     /// Operation class.  Used to select appropriate function unit in issue.
@@ -346,6 +362,12 @@ class StaticInst : public StaticInstBase
  */
 #include "cpu/static_inst_exec_sigs.hh"
 
+    /**
+     * Return the microop that goes with a particular micropc. This should
+     * only be defined/used in macroops which will contain microops
+     */
+    virtual StaticInstPtr fetchMicroOp(MicroPC micropc);
+
     /**
      * Return the target address for a PC-relative branch.
      * Invalid if not a PC-relative branch (i.e. isDirectCtrl()