1 //===- lib/MC/MCInst.cpp - MCInst implementation --------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/MC/MCInst.h" 11 #include "llvm/MC/MCExpr.h" 12 #include "llvm/MC/MCInstPrinter.h" 13 #include "llvm/Support/Debug.h" 14 #include "llvm/Support/raw_ostream.h" 15 16 using namespace llvm; 17 18 void MCOperand::print(raw_ostream &OS, const MCAsmInfo *MAI) const { 19 OS << "<MCOperand "; 20 if (!isValid()) 21 OS << "INVALID"; 22 else if (isReg()) 23 OS << "Reg:" << getReg(); 24 else if (isImm()) 25 OS << "Imm:" << getImm(); 26 else if (isExpr()) { 27 OS << "Expr:(" << *getExpr() << ")"; 28 } else 29 OS << "UNDEFINED"; 30 OS << ">"; 31 } 32 33 void MCOperand::dump() const { 34 print(dbgs(), 0); 35 dbgs() << "\n"; 36 } 37 38 void MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const { 39 OS << "<MCInst " << getOpcode(); 40 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 41 OS << " "; 42 getOperand(i).print(OS, MAI); 43 } 44 OS << ">"; 45 } 46 47 void MCInst::dump_pretty(raw_ostream &OS, const MCAsmInfo *MAI, 48 const MCInstPrinter *Printer, 49 StringRef Separator) const { 50 OS << "<MCInst #" << getOpcode(); 51 52 // Show the instruction opcode name if we have access to a printer. 53 if (Printer) 54 OS << ' ' << Printer->getOpcodeName(getOpcode()); 55 56 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 57 OS << Separator; 58 getOperand(i).print(OS, MAI); 59 } 60 OS << ">"; 61 } 62 63 void MCInst::dump() const { 64 print(dbgs(), 0); 65 dbgs() << "\n"; 66 } 67