summaryrefslogtreecommitdiff
path: root/arch/mips/isa
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2006-02-21 22:06:18 -0500
committerKorey Sewell <ksewell@umich.edu>2006-02-21 22:06:18 -0500
commit37cd6695ebdf37d6806fbb8764cfef30dce4688f (patch)
treeb447226b257e27abe166e2aa63603d7d7b4f800a /arch/mips/isa
parent8d80fd1477fa39ebc5bad4ca5c727b2871fd9b8d (diff)
parenta4799a89ded3b2ebddd682dbcb0f8d2dd968b68a (diff)
downloadgem5-37cd6695ebdf37d6806fbb8764cfef30dce4688f.tar.xz
Merge zizzer:/bk/multiarch
into zazzer.eecs.umich.edu:/z/ksewell/research/m5-sim/multiarch --HG-- rename : arch/alpha/alpha_memory.cc => arch/alpha/memory.cc rename : arch/alpha/alpha_memory.hh => arch/alpha/memory.hh extra : convert_revision : c641ba3c1009829b7276279b2dca441be1da5b30
Diffstat (limited to 'arch/mips/isa')
-rw-r--r--arch/mips/isa/base.isa104
1 files changed, 64 insertions, 40 deletions
diff --git a/arch/mips/isa/base.isa b/arch/mips/isa/base.isa
index 846d161b9..49de59e55 100644
--- a/arch/mips/isa/base.isa
+++ b/arch/mips/isa/base.isa
@@ -7,57 +7,81 @@
//Outputs to decoder.hh
output header {{
- /**
- * Base class for all MIPS static instructions.
- */
- class MipsStaticInst : public StaticInst<MIPSISA>
+ /**
+ * Base class for all MIPS static instructions.
+ */
+ class MipsStaticInst : public StaticInst
+ {
+ protected:
+
+ /// Make MipsISA register dependence tags directly visible in
+ /// this class and derived classes. Maybe these should really
+ /// live here and not in the MipsISA namespace.
+ enum DependenceTags {
+ FP_Base_DepTag = MipsISA::FP_Base_DepTag,
+ Fpcr_DepTag = MipsISA::Fpcr_DepTag,
+ Uniq_DepTag = MipsISA::Uniq_DepTag,
+ IPR_Base_DepTag = MipsISA::IPR_Base_DepTag
+ };
+
+ // Constructor
+ MipsStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : StaticInst(mnem, _machInst, __opClass)
{
- protected:
+ }
- // Constructor.
- MipsStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass)
- : StaticInst<MIPSISA>(mnem, _machInst, __opClass)
- {
- }
+ /// Print a register name for disassembly given the unique
+ /// dependence tag number (FP or int).
+ void printReg(std::ostream &os, int reg) const;
- std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
- };
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
}};
//Ouputs to decoder.cc
output decoder {{
- std::string MipsStaticInst::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+ void MipsStaticInst::printReg(std::ostream &os, int reg) const
+ {
+ if (reg < FP_Base_DepTag) {
+ ccprintf(os, "r%d", reg);
+ }
+ else {
+ ccprintf(os, "f%d", reg - FP_Base_DepTag);
+ }
+ }
+
+ std::string MipsStaticInst::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+ {
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // just print the first two source regs... if there's
+ // a third one, it's a read-modify-write dest (Rc),
+ // e.g. for CMOVxx
+ if(_numSrcRegs > 0)
+ {
+ printReg(ss, _srcRegIdx[0]);
+ }
+ if(_numSrcRegs > 1)
{
- std::stringstream ss;
-
- ccprintf(ss, "%-10s ", mnemonic);
-
- // just print the first two source regs... if there's
- // a third one, it's a read-modify-write dest (Rc),
- // e.g. for CMOVxx
- if(_numSrcRegs > 0)
- {
- printReg(ss, _srcRegIdx[0]);
- }
- if(_numSrcRegs > 1)
- {
- ss << ",";
- printReg(ss, _srcRegIdx[1]);
- }
-
- // just print the first dest... if there's a second one,
- // it's generally implicit
- if(_numDestRegs > 0)
- {
- if(_numSrcRegs > 0)
- ss << ",";
- printReg(ss, _destRegIdx[0]);
- }
-
- return ss.str();
+ ss << ",";
+ printReg(ss, _srcRegIdx[1]);
}
+ // just print the first dest... if there's a second one,
+ // it's generally implicit
+ if(_numDestRegs > 0)
+ {
+ if(_numSrcRegs > 0)
+ ss << ",";
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ return ss.str();
+ }
+
}};