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
     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