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