14b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//===- lib/MC/MCInst.cpp - MCInst implementation --------------------------===//
24b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//
34b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//                     The LLVM Compiler Infrastructure
44b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//
54b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar// This file is distributed under the University of Illinois Open Source
64b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar// License. See LICENSE.TXT for details.
74b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//
84b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar//===----------------------------------------------------------------------===//
94b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
104b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar#include "llvm/MC/MCInst.h"
118c2eebe4074ef218b30d94358f6b2e45c079605cDaniel Dunbar#include "llvm/MC/MCExpr.h"
1267c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar#include "llvm/MC/MCInstPrinter.h"
13593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene#include "llvm/Support/Debug.h"
144b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar#include "llvm/Support/raw_ostream.h"
154b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
164b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbarusing namespace llvm;
174b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
18684c593d05db0bd277268fc9d8c05bce138c745aChris Lattnervoid MCOperand::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
194b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << "<MCOperand ";
204b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  if (!isValid())
214b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << "INVALID";
224b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  else if (isReg())
234b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << "Reg:" << getReg();
244b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  else if (isImm())
254b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << "Imm:" << getImm();
268c2eebe4074ef218b30d94358f6b2e45c079605cDaniel Dunbar  else if (isExpr()) {
278cb9a3b13f3226b7e741768b69d26ecd6b5231f1Chris Lattner    OS << "Expr:(" << *getExpr() << ")";
2827ff6b5e2bc038b1013b5c93e5c2da0144341740Owen Anderson  } else if (isInst()) {
2927ff6b5e2bc038b1013b5c93e5c2da0144341740Owen Anderson    OS << "Inst:(" << *getInst() << ")";
304b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  } else
314b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << "UNDEFINED";
324b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << ">";
334b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
344b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
35286c4dc355b8be6806081b23c3097485821c7642Manman Ren#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
364b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbarvoid MCOperand::dump() const {
37593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  print(dbgs(), 0);
38593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  dbgs() << "\n";
394b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
40cc77eece74c8db09acc2af425e7e6c88a5bb30d1Manman Ren#endif
414b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
42684c593d05db0bd277268fc9d8c05bce138c745aChris Lattnervoid MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
434b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << "<MCInst " << getOpcode();
444b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
454b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << " ";
46684c593d05db0bd277268fc9d8c05bce138c745aChris Lattner    getOperand(i).print(OS, MAI);
474b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  }
484b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << ">";
494b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
504b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
5167c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbarvoid MCInst::dump_pretty(raw_ostream &OS, const MCAsmInfo *MAI,
5267c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar                         const MCInstPrinter *Printer,
5367c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar                         StringRef Separator) const {
5467c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  OS << "<MCInst #" << getOpcode();
5567c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
5667c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  // Show the instruction opcode name if we have access to a printer.
5767c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  if (Printer)
5867c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    OS << ' ' << Printer->getOpcodeName(getOpcode());
5967c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
6067c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
6167c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    OS << Separator;
6267c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    getOperand(i).print(OS, MAI);
6367c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  }
64c9adb8c61e5dacdb340509ff6090cada1f4b591cDaniel Dunbar  OS << ">";
6567c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar}
6667c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
67286c4dc355b8be6806081b23c3097485821c7642Manman Ren#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
684b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbarvoid MCInst::dump() const {
69593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  print(dbgs(), 0);
70593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  dbgs() << "\n";
714b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
72cc77eece74c8db09acc2af425e7e6c88a5bb30d1Manman Ren#endif
73