Home | History | Annotate | Download | only in MC
      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 if (isInst()) {
     29     OS << "Inst:(" << *getInst() << ")";
     30   } else
     31     OS << "UNDEFINED";
     32   OS << ">";
     33 }
     34 
     35 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
     36 void MCOperand::dump() const {
     37   print(dbgs(), nullptr);
     38   dbgs() << "\n";
     39 }
     40 #endif
     41 
     42 void MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
     43   OS << "<MCInst " << getOpcode();
     44   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
     45     OS << " ";
     46     getOperand(i).print(OS, MAI);
     47   }
     48   OS << ">";
     49 }
     50 
     51 void MCInst::dump_pretty(raw_ostream &OS, const MCAsmInfo *MAI,
     52                          const MCInstPrinter *Printer,
     53                          StringRef Separator) const {
     54   OS << "<MCInst #" << getOpcode();
     55 
     56   // Show the instruction opcode name if we have access to a printer.
     57   if (Printer)
     58     OS << ' ' << Printer->getOpcodeName(getOpcode());
     59 
     60   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
     61     OS << Separator;
     62     getOperand(i).print(OS, MAI);
     63   }
     64   OS << ">";
     65 }
     66 
     67 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
     68 void MCInst::dump() const {
     69   print(dbgs(), nullptr);
     70   dbgs() << "\n";
     71 }
     72 #endif
     73