Add {MCInst,MCOperand}::{print,dump}
authorDaniel Dunbar <daniel@zuster.org>
Thu, 27 Aug 2009 07:57:12 +0000 (07:57 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 27 Aug 2009 07:57:12 +0000 (07:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80231 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCInst.h
lib/MC/CMakeLists.txt
lib/MC/MCInst.cpp [new file with mode: 0644]

index 36011b9b65fbf729d1ded727aafa855f94448ff6..857d29411e6215a315d31a87d2994b81d5bf757b 100644 (file)
@@ -22,6 +22,7 @@
 #include "llvm/Support/DebugLoc.h"
 
 namespace llvm {
+class raw_ostream;
 
 /// MCOperand - Instances of this class represent operands of the MCInst class.
 /// This is a simple discriminated union.
@@ -119,6 +120,9 @@ public:
     Op.MCValueVal = Val;
     return Op;
   }
+
+  void print(raw_ostream &OS) const;
+  void dump() const;
 };
 
   
@@ -142,6 +146,9 @@ public:
   void addOperand(const MCOperand &Op) {
     Operands.push_back(Op);
   }
+
+  void print(raw_ostream &OS) const;
+  void dump() const;
 };
 
 
index ecb844057513cc3fa48a2ef1b0f16c28f6c6a73e..672d9b76a96234817a65ee6ecbaa5d8cfbe9b38b 100644 (file)
@@ -8,6 +8,7 @@ add_llvm_library(LLVMMC
   MCAssembler.cpp
   MCCodeEmitter.cpp
   MCContext.cpp
+  MCInst.cpp
   MCMachOStreamer.cpp
   MCNullStreamer.cpp
   MCSection.cpp
diff --git a/lib/MC/MCInst.cpp b/lib/MC/MCInst.cpp
new file mode 100644 (file)
index 0000000..469dc79
--- /dev/null
@@ -0,0 +1,52 @@
+//===- lib/MC/MCInst.cpp - MCInst implementation --------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/MC/MCInst.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+void MCOperand::print(raw_ostream &OS) const {
+  OS << "<MCOperand ";
+  if (!isValid())
+    OS << "INVALID";
+  else if (isReg())
+    OS << "Reg:" << getReg();
+  else if (isImm())
+    OS << "Imm:" << getImm();
+  else if (isMBBLabel())
+    OS << "MBB:(" << getMBBLabelFunction() << ","
+       << getMBBLabelBlock() << ")";
+  else if (isMCValue()) {
+    OS << "Value:(";
+    getMCValue().print(OS);
+    OS << ")";
+  } else
+    OS << "UNDEFINED";
+  OS << ">";
+}
+
+void MCOperand::dump() const {
+  print(errs());
+  errs() << "\n";
+}
+
+void MCInst::print(raw_ostream &OS) const {
+  OS << "<MCInst " << getOpcode();
+  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
+    OS << " ";
+    getOperand(i).print(OS);
+  }
+  OS << ">";
+}
+
+void MCInst::dump() const {
+  print(errs());
+  errs() << "\n";
+}