changeset 3d8a23caa1ef in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=3d8a23caa1ef
description:
        X86: Consolidate extra microop flags into one parameter.

        This single parameter replaces the collection of bools that set up 
various
        flavors of microops. A flag parameter also allows other flags to be set 
like
        the serialize before/after flags, etc., without having to change the
        constructor.

diffstat:

 src/arch/x86/insts/microfpop.hh       |   6 +--
 src/arch/x86/insts/microldstop.hh     |   5 +--
 src/arch/x86/insts/micromediaop.hh    |  21 ++++----------
 src/arch/x86/insts/microop.hh         |   9 +-----
 src/arch/x86/insts/microregop.hh      |  21 ++++----------
 src/arch/x86/isa/macroop.isa          |  11 +++++--
 src/arch/x86/isa/microops/base.isa    |  19 ++----------
 src/arch/x86/isa/microops/debug.isa   |  23 ++++++----------
 src/arch/x86/isa/microops/fpop.isa    |  16 ++++-------
 src/arch/x86/isa/microops/ldstop.isa  |  19 +++++--------
 src/arch/x86/isa/microops/limmop.isa  |  20 ++++++--------
 src/arch/x86/isa/microops/mediaop.isa |  28 +++++++-------------
 src/arch/x86/isa/microops/regop.isa   |  28 +++++++-------------
 src/arch/x86/isa/microops/seqop.isa   |  48 +++++++++++++++-------------------
 src/arch/x86/isa/microops/specop.isa  |  37 ++++++++++----------------
 15 files changed, 116 insertions(+), 195 deletions(-)

diffs (truncated from 847 to 300 lines):

diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/insts/microfpop.hh
--- a/src/arch/x86/insts/microfpop.hh   Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/insts/microfpop.hh   Mon Aug 23 09:44:19 2010 -0700
@@ -60,13 +60,11 @@
         // Constructor
         FpOp(ExtMachInst _machInst,
                 const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                uint64_t setFlags,
                 InstRegIndex _src1, InstRegIndex _src2, InstRegIndex _dest,
                 uint8_t _dataSize, int8_t _spm,
                 OpClass __opClass) :
-            X86MicroopBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            X86MicroopBase(_machInst, mnem, _instMnem, setFlags,
                     __opClass),
             src1(_src1.idx), src2(_src2.idx), dest(_dest.idx),
             dataSize(_dataSize), spm(_spm)
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/insts/microldstop.hh
--- a/src/arch/x86/insts/microldstop.hh Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/insts/microldstop.hh Mon Aug 23 09:44:19 2010 -0700
@@ -74,15 +74,14 @@
         //Constructor
         LdStOp(ExtMachInst _machInst,
                 const char * mnem, const char * _instMnem,
-                bool isMicro, bool isDelayed, bool isFirst, bool isLast,
+                uint64_t setFlags,
                 uint8_t _scale, InstRegIndex _index, InstRegIndex _base,
                 uint64_t _disp, InstRegIndex _segment,
                 InstRegIndex _data,
                 uint8_t _dataSize, uint8_t _addressSize,
                 Request::FlagsType _memFlags,
                 OpClass __opClass) :
-        X86MicroopBase(machInst, mnem, _instMnem,
-                isMicro, isDelayed, isFirst, isLast, __opClass),
+        X86MicroopBase(machInst, mnem, _instMnem, setFlags, __opClass),
                 scale(_scale), index(_index.idx), base(_base.idx),
                 disp(_disp), segment(_segment.idx),
                 data(_data.idx),
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/insts/micromediaop.hh
--- a/src/arch/x86/insts/micromediaop.hh        Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/insts/micromediaop.hh        Mon Aug 23 09:44:19 2010 -0700
@@ -53,14 +53,11 @@
 
         // Constructor
         MediaOpBase(ExtMachInst _machInst,
-                const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char *mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, InstRegIndex _dest,
                 uint8_t _srcSize, uint8_t _destSize, uint8_t _ext,
                 OpClass __opClass) :
-            X86MicroopBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            X86MicroopBase(_machInst, mnem, _instMnem, setFlags,
                     __opClass),
             src1(_src1.idx), dest(_dest.idx),
             srcSize(_srcSize), destSize(_destSize), ext(_ext)
@@ -98,14 +95,11 @@
 
         // Constructor
         MediaOpReg(ExtMachInst _machInst,
-                const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char *mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, InstRegIndex _src2, InstRegIndex _dest,
                 uint8_t _srcSize, uint8_t _destSize, uint8_t _ext,
                 OpClass __opClass) :
-            MediaOpBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            MediaOpBase(_machInst, mnem, _instMnem, setFlags,
                     _src1, _dest, _srcSize, _destSize, _ext,
                     __opClass),
             src2(_src2.idx)
@@ -122,14 +116,11 @@
 
         // Constructor
         MediaOpImm(ExtMachInst _machInst,
-                const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char *mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, uint8_t _imm8, InstRegIndex _dest,
                 uint8_t _srcSize, uint8_t _destSize, uint8_t _ext,
                 OpClass __opClass) :
-            MediaOpBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            MediaOpBase(_machInst, mnem, _instMnem, setFlags,
                     _src1, _dest, _srcSize, _destSize, _ext,
                     __opClass),
             imm8(_imm8)
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/insts/microop.hh
--- a/src/arch/x86/insts/microop.hh     Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/insts/microop.hh     Mon Aug 23 09:44:19 2010 -0700
@@ -96,16 +96,11 @@
 
         X86MicroopBase(ExtMachInst _machInst,
                 const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
-                OpClass __opClass) :
+                uint64_t setFlags, OpClass __opClass) :
             X86ISA::X86StaticInst(mnem, _machInst, __opClass),
             instMnem(_instMnem)
         {
-            flags[IsMicroop] = isMicro;
-            flags[IsDelayedCommit] = isDelayed;
-            flags[IsFirstMicroop] = isFirst;
-            flags[IsLastMicroop] = isLast;
+            flags |= setFlags;
         }
 
         std::string generateDisassembly(Addr pc,
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/insts/microregop.hh
--- a/src/arch/x86/insts/microregop.hh  Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/insts/microregop.hh  Mon Aug 23 09:44:19 2010 -0700
@@ -58,14 +58,11 @@
 
         // Constructor
         RegOpBase(ExtMachInst _machInst,
-                const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char *mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, InstRegIndex _dest,
                 uint8_t _dataSize, uint16_t _ext,
                 OpClass __opClass) :
-            X86MicroopBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            X86MicroopBase(_machInst, mnem, _instMnem, setFlags,
                     __opClass),
             src1(_src1.idx), dest(_dest.idx),
             dataSize(_dataSize), ext(_ext)
@@ -86,14 +83,11 @@
 
         // Constructor
         RegOp(ExtMachInst _machInst,
-                const char *mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char *mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, InstRegIndex _src2, InstRegIndex _dest,
                 uint8_t _dataSize, uint16_t _ext,
                 OpClass __opClass) :
-            RegOpBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            RegOpBase(_machInst, mnem, _instMnem, setFlags,
                     _src1, _dest, _dataSize, _ext,
                     __opClass),
             src2(_src2.idx)
@@ -111,14 +105,11 @@
 
         // Constructor
         RegOpImm(ExtMachInst _machInst,
-                const char * mnem, const char *_instMnem,
-                bool isMicro, bool isDelayed,
-                bool isFirst, bool isLast,
+                const char * mnem, const char *_instMnem, uint64_t setFlags,
                 InstRegIndex _src1, uint8_t _imm8, InstRegIndex _dest,
                 uint8_t _dataSize, uint16_t _ext,
                 OpClass __opClass) :
-            RegOpBase(_machInst, mnem, _instMnem,
-                    isMicro, isDelayed, isFirst, isLast,
+            RegOpBase(_machInst, mnem, _instMnem, setFlags,
                     _src1, _dest, _dataSize, _ext,
                     __opClass),
             imm8(_imm8)
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/isa/macroop.isa
--- a/src/arch/x86/isa/macroop.isa      Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/isa/macroop.isa      Mon Aug 23 09:44:19 2010 -0700
@@ -185,11 +185,16 @@
             allocMicroops = ''
             micropc = 0
             for op in self.microops:
-                isLast = (micropc == numMicroops - 1)
+                flags = ["IsMicroop"]
+                if micropc == numMicroops - 1:
+                    flags.append("IsLastMicroop")
+                else:
+                    flags.append("IsDelayedCommit")
+                if micropc == 0:
+                    flags.append("IsFirstMicroop")
                 allocMicroops += \
                     "microops[%d] = %s;\n" % \
-                    (micropc, op.getAllocator(True, not isLast,
-                                              micropc == 0, isLast))
+                    (micropc, op.getAllocator(flags))
                 micropc += 1
             if env.useStackSize:
                 useStackSize = "true"
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/isa/microops/base.isa
--- a/src/arch/x86/isa/microops/base.isa        Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/isa/microops/base.isa        Mon Aug 23 09:44:19 2010 -0700
@@ -78,25 +78,14 @@
         def __init__(self, name):
             self.name = name
 
-        # This converts a python bool into a C++ bool
-        def cppBool(self, val):
-            if val:
-                return "true"
-            else:
-                return "false"
-
-        # This converts a list of python bools into
-        # a comma seperated list of C++ bools.
-        def microFlagsText(self, vals):
-            text = ""
-            for val in vals:
-                text += ", %s" % self.cppBool(val)
-            return text
+        def microFlagsText(self, flags):
+            wrapped = ("(1ULL << StaticInst::%s)" % flag for flag in flags)
+            return " | ".join(wrapped)
 
         def getGeneratorDef(self, micropc):
             return self.generatorTemplate % \
                 (self.className, micropc, \
-                 self.getAllocator(True, True, False, False))
+                 self.getAllocator(["IsMicroop", "IsDelayedCommit"]))
 
         def getGenerator(self, micropc):
             return self.generatorNameTemplate % (self.className, micropc)
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/isa/microops/debug.isa
--- a/src/arch/x86/isa/microops/debug.isa       Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/isa/microops/debug.isa       Mon Aug 23 09:44:19 2010 -0700
@@ -50,8 +50,7 @@
 
       public:
         MicroDebugBase(ExtMachInst _machInst, const char * mnem,
-                const char * instMnem,
-                bool isMicro, bool isDelayed, bool isFirst, bool isLast,
+                const char * instMnem, uint64_t setFlags,
                 std::string _message, uint8_t _cc);
 
         MicroDebugBase(ExtMachInst _machInst, const char * mnem,
@@ -69,8 +68,7 @@
         void buildMe();
       public:
         %(class_name)s(ExtMachInst _machInst, const char * instMnem,
-                bool isMicro, bool isDelayed, bool isFirst, bool isLast,
-                std::string _message, uint8_t _cc);
+                uint64_t setFlags, std::string _message, uint8_t _cc);
 
         %(class_name)s(ExtMachInst _machInst, const char * instMnem,
                 std::string _message, uint8_t _cc);
@@ -96,18 +94,16 @@
     inline MicroDebugBase::MicroDebugBase(
             ExtMachInst machInst, const char * mnem, const char * instMnem,
             std::string _message, uint8_t _cc) :
-        X86MicroopBase(machInst, mnem, instMnem,
-                false, false, false, false, No_OpClass),
+        X86MicroopBase(machInst, mnem, instMnem, 0, No_OpClass),
         message(_message), cc(_cc)
     {
     }
 
     inline MicroDebugBase::MicroDebugBase(
             ExtMachInst machInst, const char * mnem, const char * instMnem,
-            bool isMicro, bool isDelayed, bool isFirst, bool isLast,
-            std::string _message, uint8_t _cc) :
+            uint64_t setFlags, std::string _message, uint8_t _cc) :
         X86MicroopBase(machInst, mnem, instMnem,
-                isMicro, isDelayed, isFirst, isLast, No_OpClass),
+                setFlags, No_OpClass),
                 message(_message), cc(_cc)
     {
     }
@@ -129,11 +125,10 @@
     }
 
     inline %(class_name)s::%(class_name)s(
-            ExtMachInst machInst, const char * instMnem,
-            bool isMicro, bool isDelayed, bool isFirst, bool isLast,
+            ExtMachInst machInst, const char * instMnem, uint64_t setFlags,
             std::string _message, uint8_t _cc) :
         %(base_class)s(machInst, "%(func)s", instMnem,
-                isMicro, isDelayed, isFirst, isLast, _message, _cc)
+                setFlags, _message, _cc)
     {
         buildMe();
     }
@@ -164,8 +159,8 @@
             else:
                 self.cond = "0"
 
-        def getAllocator(self, *microFlags):
-            allocator = '''new %(class_name)s(machInst, macrocodeBlock
+        def getAllocator(self, microFlags):
+            allocator = '''new %(class_name)s(machInst, macrocodeBlock,
                     %(flags)s, "%(message)s", %(cc)s)''' % {
                 "class_name" : self.className,
                 "flags" : self.microFlagsText(microFlags),
diff -r 0a32de653c10 -r 3d8a23caa1ef src/arch/x86/isa/microops/fpop.isa
--- a/src/arch/x86/isa/microops/fpop.isa        Mon Aug 23 09:44:19 2010 -0700
+++ b/src/arch/x86/isa/microops/fpop.isa        Mon Aug 23 09:44:19 2010 -0700
@@ -79,8 +79,7 @@
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to