summaryrefslogtreecommitdiff
path: root/src/arch/arm/insts/static_inst.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-06-27 00:29:12 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-06-27 00:29:12 -0700
commita4ac3fad7a9a6c48fdde3d42e35b113bbd03eacf (patch)
tree283ed5b25e52462c1d0988cba6b26020c2107e40 /src/arch/arm/insts/static_inst.cc
parent38d8bc64baab5ef17958d84e9d5fe6d62c31fca3 (diff)
downloadgem5-a4ac3fad7a9a6c48fdde3d42e35b113bbd03eacf.tar.xz
ARM: Write a function for printing mnemonics and predicates.
Diffstat (limited to 'src/arch/arm/insts/static_inst.cc')
-rw-r--r--src/arch/arm/insts/static_inst.cc68
1 files changed, 65 insertions, 3 deletions
diff --git a/src/arch/arm/insts/static_inst.cc b/src/arch/arm/insts/static_inst.cc
index 1a7853f2c..6b641d8bb 100644
--- a/src/arch/arm/insts/static_inst.cc
+++ b/src/arch/arm/insts/static_inst.cc
@@ -245,14 +245,76 @@ ArmStaticInst::printReg(std::ostream &os, int reg) const
}
}
+void
+ArmStaticInst::printMnemonic(std::ostream &os,
+ const std::string &suffix,
+ bool withPred) const
+{
+ os << " " << mnemonic;
+ if (withPred) {
+ unsigned condCode = machInst.condCode;
+ switch (condCode) {
+ case COND_EQ:
+ os << "eq";
+ break;
+ case COND_NE:
+ os << "ne";
+ break;
+ case COND_CS:
+ os << "cs";
+ break;
+ case COND_CC:
+ os << "cc";
+ break;
+ case COND_MI:
+ os << "mi";
+ break;
+ case COND_PL:
+ os << "pl";
+ break;
+ case COND_VS:
+ os << "vs";
+ break;
+ case COND_VC:
+ os << "vc";
+ break;
+ case COND_HI:
+ os << "hi";
+ break;
+ case COND_LS:
+ os << "ls";
+ break;
+ case COND_GE:
+ os << "ge";
+ break;
+ case COND_LT:
+ os << "lt";
+ break;
+ case COND_GT:
+ os << "gt";
+ break;
+ case COND_LE:
+ os << "le";
+ break;
+ case COND_AL:
+ // This one is implicit.
+ break;
+ case COND_NV:
+ os << "nv";
+ break;
+ default:
+ panic("Unrecognized condition code %d.\n", condCode);
+ }
+ os << suffix << " ";
+ }
+}
+
std::string
ArmStaticInst::generateDisassembly(Addr pc,
const SymbolTable *symtab) const
{
std::stringstream ss;
-
- ccprintf(ss, "%-10s ", mnemonic);
-
+ printMnemonic(ss);
return ss.str();
}
}