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
354b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbarvoid MCOperand::dump() const {
36593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  print(dbgs(), 0);
37593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  dbgs() << "\n";
384b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
394b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
40684c593d05db0bd277268fc9d8c05bce138c745aChris Lattnervoid MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
414b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << "<MCInst " << getOpcode();
424b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
434b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar    OS << " ";
44684c593d05db0bd277268fc9d8c05bce138c745aChris Lattner    getOperand(i).print(OS, MAI);
454b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  }
464b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar  OS << ">";
474b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
484b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar
4967c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbarvoid MCInst::dump_pretty(raw_ostream &OS, const MCAsmInfo *MAI,
5067c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar                         const MCInstPrinter *Printer,
5167c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar                         StringRef Separator) const {
5267c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  OS << "<MCInst #" << getOpcode();
5367c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
5467c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  // Show the instruction opcode name if we have access to a printer.
5567c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  if (Printer)
5667c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    OS << ' ' << Printer->getOpcodeName(getOpcode());
5767c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
5867c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
5967c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    OS << Separator;
6067c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar    getOperand(i).print(OS, MAI);
6167c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar  }
62c9adb8c61e5dacdb340509ff6090cada1f4b591cDaniel Dunbar  OS << ">";
6367c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar}
6467c076cf59d14fc96feb5c915447f8ea79cf8325Daniel Dunbar
654b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbarvoid MCInst::dump() const {
66593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  print(dbgs(), 0);
67593b6e4cb9386818da1a185fed4a8cc1d5af43efDavid Greene  dbgs() << "\n";
684b770c20778ccb5d2f304fa73e0522a7ab8c4623Daniel Dunbar}
69