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