LLVM 19.0.0git
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
llvm::MCInstPrinter Class Referenceabstract

This is an instance of a target assembly language printer that converts an MCInst to valid target assembly syntax. More...

#include "llvm/MC/MCInstPrinter.h"

Inheritance diagram for llvm::MCInstPrinter:
Inheritance graph
[legend]

Classes

class  WithMarkup
 

Public Types

enum class  Markup { Immediate , Register , Target , Memory }
 

Public Member Functions

 MCInstPrinter (const MCAsmInfo &mai, const MCInstrInfo &mii, const MCRegisterInfo &mri)
 
virtual ~MCInstPrinter ()
 
virtual bool applyTargetSpecificCLOption (StringRef Opt)
 Customize the printer according to a command line option.
 
void setCommentStream (raw_ostream &OS)
 Specify a stream to emit comments to.
 
virtual std::pair< const char *, uint64_tgetMnemonic (const MCInst *MI)=0
 Returns a pair containing the mnemonic for MI and the number of bits left for further processing by printInstruction (generated by tablegen).
 
virtual void printInst (const MCInst *MI, uint64_t Address, StringRef Annot, const MCSubtargetInfo &STI, raw_ostream &OS)=0
 Print the specified MCInst to the specified raw_ostream.
 
StringRef getOpcodeName (unsigned Opcode) const
 Return the name of the specified opcode enum (e.g.
 
virtual void printRegName (raw_ostream &OS, MCRegister Reg) const
 Print the assembler register name.
 
bool getUseMarkup () const
 
void setUseMarkup (bool Value)
 
bool getUseColor () const
 
void setUseColor (bool Value)
 
WithMarkup markup (raw_ostream &OS, Markup M) const
 
bool getPrintImmHex () const
 
void setPrintImmHex (bool Value)
 
void setPrintHexStyle (HexStyle::Style Value)
 
void setPrintBranchImmAsAddress (bool Value)
 
void setSymbolizeOperands (bool Value)
 
void setMCInstrAnalysis (const MCInstrAnalysis *Value)
 
format_object< int64_t > formatImm (int64_t Value) const
 Utility function to print immediates in decimal or hex.
 
format_object< int64_t > formatDec (int64_t Value) const
 Utility functions to print decimal/hexadecimal values.
 
format_object< int64_t > formatHex (int64_t Value) const
 
format_object< uint64_tformatHex (uint64_t Value) const
 

Protected Member Functions

void printAnnotation (raw_ostream &OS, StringRef Annot)
 Utility function for printing annotations.
 
const charmatchAliasPatterns (const MCInst *MI, const MCSubtargetInfo *STI, const AliasMatchingData &M)
 Helper for matching MCInsts to alias patterns when printing instructions.
 

Protected Attributes

raw_ostreamCommentStream = nullptr
 A stream that comments can be emitted to if desired.
 
const MCAsmInfoMAI
 
const MCInstrInfoMII
 
const MCRegisterInfoMRI
 
const MCInstrAnalysisMIA = nullptr
 
bool UseMarkup = false
 True if we are printing marked up assembly.
 
bool UseColor = false
 True if we are printing colored assembly.
 
bool PrintAliases = true
 True if we prefer aliases (e.g. nop) to raw mnemonics.
 
bool PrintImmHex = false
 True if we are printing immediates as hex.
 
HexStyle::Style PrintHexStyle = HexStyle::C
 Which style to use for printing hexadecimal values.
 
bool PrintBranchImmAsAddress = false
 If true, a branch immediate (e.g.
 
bool SymbolizeOperands = false
 If true, symbolize branch target and memory reference operands.
 

Detailed Description

This is an instance of a target assembly language printer that converts an MCInst to valid target assembly syntax.

Definition at line 45 of file MCInstPrinter.h.

Member Enumeration Documentation

◆ Markup

enum class llvm::MCInstPrinter::Markup
strong
Enumerator
Immediate 
Register 
Target 
Memory 

Definition at line 92 of file MCInstPrinter.h.

Constructor & Destructor Documentation

◆ MCInstPrinter()

llvm::MCInstPrinter::MCInstPrinter ( const MCAsmInfo mai,
const MCInstrInfo mii,
const MCRegisterInfo mri 
)
inline

Definition at line 87 of file MCInstPrinter.h.

◆ ~MCInstPrinter()

MCInstPrinter::~MCInstPrinter ( )
virtualdefault

Member Function Documentation

◆ applyTargetSpecificCLOption()

virtual bool llvm::MCInstPrinter::applyTargetSpecificCLOption ( StringRef  Opt)
inlinevirtual

Customize the printer according to a command line option.

Returns
true if the option is recognized and applied.

Reimplemented in llvm::AArch64InstPrinter, llvm::ARMInstPrinter, llvm::CSKYInstPrinter, llvm::LoongArchInstPrinter, and llvm::RISCVInstPrinter.

Definition at line 123 of file MCInstPrinter.h.

◆ formatDec()

format_object< int64_t > MCInstPrinter::formatDec ( int64_t  Value) const

◆ formatHex() [1/2]

format_object< int64_t > MCInstPrinter::formatHex ( int64_t  Value) const

◆ formatHex() [2/2]

format_object< uint64_t > MCInstPrinter::formatHex ( uint64_t  Value) const

◆ formatImm()

format_object< int64_t > llvm::MCInstPrinter::formatImm ( int64_t  Value) const
inline

Utility function to print immediates in decimal or hex.

Definition at line 170 of file MCInstPrinter.h.

References formatDec(), formatHex(), and PrintImmHex.

Referenced by llvm::ARMInstPrinter::printAddrModeImm12Operand(), llvm::AArch64InstPrinter::printAddSubImm(), llvm::AArch64InstPrinter::printAlignedLabel(), llvm::AArch64InstPrinter::printAMIndexedWB(), llvm::RISCVInstPrinter::printBranchOperand(), llvm::BPFInstPrinter::printBrTargetOperand(), llvm::AArch64InstPrinter::printBTIHintOp(), llvm::RISCVInstPrinter::printCSRSystemRegister(), llvm::AArch64InstPrinter::printImm(), llvm::BPFInstPrinter::printImm64Operand(), llvm::AArch64InstPrinter::printImm8OptLsl(), llvm::ARMInstPrinter::printImmPlusOneOperand(), llvm::AArch64InstPrinter::printImmRangeScale(), llvm::AArch64InstPrinter::printImmScale(), llvm::AArch64InstPrinter::printInst(), llvm::X86IntelInstPrinter::printMemOffset(), llvm::X86ATTInstPrinter::printMemOffset(), llvm::BPFInstPrinter::printMemOperand(), llvm::X86IntelInstPrinter::printMemReference(), llvm::X86ATTInstPrinter::printMemReference(), llvm::ARMInstPrinter::printOperand(), llvm::RISCVInstPrinter::printOperand(), llvm::NVPTXInstPrinter::printOperand(), llvm::X86IntelInstPrinter::printOperand(), llvm::BPFInstPrinter::printOperand(), llvm::SPIRVInstPrinter::printOperand(), llvm::X86ATTInstPrinter::printOperand(), llvm::HexagonInstPrinter::printOperand(), llvm::X86InstPrinterCommon::printPCRelImm(), llvm::AArch64InstPrinter::printPrefetchOp(), llvm::AArch64InstPrinter::printPSBHintOp(), llvm::AArch64InstPrinter::printRangePrefetchAlias(), llvm::AArch64InstPrinter::printRPRFMOperand(), llvm::AArch64InstPrinter::printSImm(), llvm::AArch64InstPrinter::printSVEPattern(), llvm::AArch64InstPrinter::printSystemPStateField(), llvm::ARMInstPrinter::printT2AddrModeImm0_1020s4Operand(), llvm::ARMInstPrinter::printThumbAddrModeImm5SOperand(), llvm::ARMInstPrinter::printThumbLdrLabelOperand(), llvm::ARMInstPrinter::printThumbS4ImmOperand(), llvm::ARMInstPrinter::printThumbSRImm(), llvm::X86IntelInstPrinter::printU8Imm(), llvm::X86ATTInstPrinter::printU8Imm(), llvm::AArch64InstPrinter::printUImm12Offset(), and llvm::RISCVInstPrinter::printVTypeI().

◆ getMnemonic()

virtual std::pair< const char *, uint64_t > llvm::MCInstPrinter::getMnemonic ( const MCInst MI)
pure virtual

◆ getOpcodeName()

StringRef MCInstPrinter::getOpcodeName ( unsigned  Opcode) const

Return the name of the specified opcode enum (e.g.

getOpcodeName - Return the name of the specified opcode enum (e.g.

"MOV32ri") or empty if we can't resolve it.

Definition at line 42 of file MCInstPrinter.cpp.

References llvm::MCInstrInfo::getName(), and MII.

◆ getPrintImmHex()

bool llvm::MCInstPrinter::getPrintImmHex ( ) const
inline

◆ getUseColor()

bool llvm::MCInstPrinter::getUseColor ( ) const
inline

Definition at line 152 of file MCInstPrinter.h.

References UseColor.

Referenced by markup().

◆ getUseMarkup()

bool llvm::MCInstPrinter::getUseMarkup ( ) const
inline

Definition at line 149 of file MCInstPrinter.h.

References UseMarkup.

Referenced by markup(), and llvm::ARMInstPrinter::printOperand().

◆ markup()

MCInstPrinter::WithMarkup MCInstPrinter::markup ( raw_ostream OS,
Markup  M 
) const

Definition at line 227 of file MCInstPrinter.cpp.

References getUseColor(), getUseMarkup(), and OS.

Referenced by llvm::ARMInstPrinter::printAddrMode2OffsetOperand(), llvm::ARMInstPrinter::printAddrMode3OffsetOperand(), llvm::ARMInstPrinter::printAddrMode5FP16Operand(), llvm::ARMInstPrinter::printAddrMode5Operand(), llvm::ARMInstPrinter::printAddrMode6Operand(), llvm::ARMInstPrinter::printAddrMode7Operand(), llvm::ARMInstPrinter::printAddrModeImm12Operand(), llvm::ARMInstPrinter::printAddrModeTBB(), llvm::ARMInstPrinter::printAddrModeTBH(), llvm::AArch64InstPrinter::printAddSubImm(), llvm::AArch64InstPrinter::printAdrAdrpLabel(), llvm::ARMInstPrinter::printAdrLabelOperand(), llvm::AArch64InstPrinter::printAlignedLabel(), llvm::ARMInstPrinter::printAM2PreOrOffsetIndexOp(), llvm::ARMInstPrinter::printAM3PreOrOffsetIndexOp(), llvm::AArch64InstPrinter::printAMIndexedWB(), llvm::AArch64InstPrinter::printArithExtend(), llvm::AArch64InstPrinter::printBarriernXSOption(), llvm::AArch64InstPrinter::printBarrierOption(), llvm::ARMInstPrinter::printBitfieldInvMaskImmOperand(), llvm::RISCVInstPrinter::printBranchOperand(), llvm::AArch64InstPrinter::printBTIHintOp(), llvm::AArch64InstPrinter::printComplexRotationOp(), llvm::RISCVInstPrinter::printCSRSystemRegister(), llvm::X86ATTInstPrinter::printDstIdx(), llvm::X86IntelInstPrinter::printDstIdx(), llvm::AArch64InstPrinter::printExactFPImm(), llvm::ARMInstPrinter::printFBits16(), llvm::ARMInstPrinter::printFBits32(), llvm::SystemZInstPrinter::printFormattedRegName(), llvm::RISCVInstPrinter::printFPImmOperand(), llvm::AArch64InstPrinter::printFPImmOperand(), llvm::ARMInstPrinter::printFPImmOperand(), llvm::AArch64InstPrinter::printImm(), llvm::AArch64InstPrinter::printImm8OptLsl(), llvm::AArch64InstPrinter::printImmHex(), llvm::ARMInstPrinter::printImmPlusOneOperand(), llvm::AArch64InstPrinter::printImmScale(), llvm::AArch64InstPrinter::printImmSVE(), llvm::AArch64InstPrinter::printInst(), llvm::AArch64AppleInstPrinter::printInst(), llvm::ARMInstPrinter::printInst(), llvm::AArch64InstPrinter::printLogicalImm(), llvm::AArch64InstPrinter::printMemExtendImpl(), llvm::X86IntelInstPrinter::printMemOffset(), llvm::X86ATTInstPrinter::printMemOffset(), llvm::X86IntelInstPrinter::printMemReference(), llvm::X86ATTInstPrinter::printMemReference(), llvm::ARMInstPrinter::printModImmOperand(), llvm::ARMInstPrinter::printMveAddrModeRQOperand(), llvm::ARMInstPrinter::printOperand(), llvm::RISCVInstPrinter::printOperand(), llvm::NVPTXInstPrinter::printOperand(), llvm::X86IntelInstPrinter::printOperand(), llvm::X86ATTInstPrinter::printOperand(), llvm::SystemZInstPrinter::printOperand(), llvm::X86InstPrinterCommon::printPCRelImm(), llvm::ARMInstPrinter::printPKHASRShiftImm(), llvm::ARMInstPrinter::printPKHLSLShiftImm(), llvm::ARMInstPrinter::printPostIdxImm8Operand(), llvm::ARMInstPrinter::printPostIdxImm8s4Operand(), llvm::AArch64InstPrinter::printPostIncOperand(), llvm::AArch64InstPrinter::printPrefetchOp(), llvm::AArch64InstPrinter::printPSBHintOp(), llvm::RISCVInstPrinter::printRegName(), llvm::AArch64InstPrinter::printRegName(), llvm::ARMInstPrinter::printRegName(), llvm::MipsInstPrinter::printRegName(), llvm::X86ATTInstPrinter::printRegName(), llvm::X86IntelInstPrinter::printRegName(), llvm::RISCVInstPrinter::printRlist(), llvm::ARMInstPrinter::printRotImmOperand(), llvm::AArch64InstPrinter::printShifter(), llvm::ARMInstPrinter::printShiftImmOperand(), llvm::AArch64InstPrinter::printSIMDType10Operand(), llvm::AArch64InstPrinter::printSImm(), llvm::RISCVInstPrinter::printSpimm(), llvm::X86ATTInstPrinter::printSrcIdx(), llvm::X86IntelInstPrinter::printSrcIdx(), llvm::X86ATTInstPrinter::printSTiRegOperand(), llvm::AArch64InstPrinter::printSVELogicalImm(), llvm::AArch64InstPrinter::printSVEPattern(), llvm::ARMInstPrinter::printT2AddrModeImm0_1020s4Operand(), llvm::ARMInstPrinter::printT2AddrModeImm8OffsetOperand(), llvm::ARMInstPrinter::printT2AddrModeImm8Operand(), llvm::ARMInstPrinter::printT2AddrModeImm8s4OffsetOperand(), llvm::ARMInstPrinter::printT2AddrModeImm8s4Operand(), llvm::ARMInstPrinter::printT2AddrModeSoRegOperand(), llvm::ARMInstPrinter::printThumbAddrModeImm5SOperand(), llvm::ARMInstPrinter::printThumbAddrModeRROperand(), llvm::ARMInstPrinter::printThumbLdrLabelOperand(), llvm::ARMInstPrinter::printThumbS4ImmOperand(), llvm::ARMInstPrinter::printThumbSRImm(), llvm::X86IntelInstPrinter::printU8Imm(), llvm::X86ATTInstPrinter::printU8Imm(), llvm::AArch64InstPrinter::printUImm12Offset(), and llvm::ARMInstPrinter::printVMOVModImmOperand().

◆ matchAliasPatterns()

const char * MCInstPrinter::matchAliasPatterns ( const MCInst MI,
const MCSubtargetInfo STI,
const AliasMatchingData M 
)
protected

Helper for matching MCInsts to alias patterns when printing instructions.

Definition at line 124 of file MCInstPrinter.cpp.

References llvm::all_of(), assert(), llvm::CallingConv::C, llvm::lower_bound(), matchAliasCondition(), MI, MRI, and P.

◆ printAnnotation()

void MCInstPrinter::printAnnotation ( raw_ostream OS,
StringRef  Annot 
)
protected

◆ printInst()

virtual void llvm::MCInstPrinter::printInst ( const MCInst MI,
uint64_t  Address,
StringRef  Annot,
const MCSubtargetInfo STI,
raw_ostream OS 
)
pure virtual

Print the specified MCInst to the specified raw_ostream.

Address the address of current instruction on most targets, used to print a PC relative immediate as the target address. On targets where a PC relative immediate is relative to the next instruction and the length of a MCInst is difficult to measure (e.g. x86), this is the address of the next instruction. If Address is 0, the immediate will be printed.

Implemented in llvm::AArch64InstPrinter, llvm::AArch64AppleInstPrinter, llvm::AMDGPUInstPrinter, llvm::R600InstPrinter, llvm::ARCInstPrinter, llvm::ARMInstPrinter, llvm::AVRInstPrinter, llvm::BPFInstPrinter, llvm::CSKYInstPrinter, llvm::LanaiInstPrinter, llvm::LoongArchInstPrinter, llvm::M68kInstPrinter, llvm::MipsInstPrinter, llvm::MSP430InstPrinter, llvm::PPCInstPrinter, llvm::RISCVInstPrinter, llvm::SparcInstPrinter, llvm::SystemZInstPrinter, llvm::XCoreInstPrinter, llvm::XtensaInstPrinter, llvm::NVPTXInstPrinter, llvm::SPIRVInstPrinter, llvm::VEInstPrinter, llvm::WebAssemblyInstPrinter, llvm::X86ATTInstPrinter, llvm::X86IntelInstPrinter, and llvm::HexagonInstPrinter.

Referenced by LLVMDisasmInstruction(), and llvm::MCTargetStreamer::prettyPrintAsm().

◆ printRegName()

void MCInstPrinter::printRegName ( raw_ostream OS,
MCRegister  Reg 
) const
virtual

◆ setCommentStream()

void llvm::MCInstPrinter::setCommentStream ( raw_ostream OS)
inline

Specify a stream to emit comments to.

Definition at line 126 of file MCInstPrinter.h.

References CommentStream, and OS.

Referenced by LLVMSetDisasmOptions().

◆ setMCInstrAnalysis()

void llvm::MCInstPrinter::setMCInstrAnalysis ( const MCInstrAnalysis Value)
inline

Definition at line 167 of file MCInstPrinter.h.

References MIA.

◆ setPrintBranchImmAsAddress()

void llvm::MCInstPrinter::setPrintBranchImmAsAddress ( bool  Value)
inline

Definition at line 162 of file MCInstPrinter.h.

References PrintBranchImmAsAddress.

◆ setPrintHexStyle()

void llvm::MCInstPrinter::setPrintHexStyle ( HexStyle::Style  Value)
inline

Definition at line 160 of file MCInstPrinter.h.

References PrintHexStyle.

◆ setPrintImmHex()

void llvm::MCInstPrinter::setPrintImmHex ( bool  Value)
inline

◆ setSymbolizeOperands()

void llvm::MCInstPrinter::setSymbolizeOperands ( bool  Value)
inline

Definition at line 166 of file MCInstPrinter.h.

References SymbolizeOperands.

◆ setUseColor()

void llvm::MCInstPrinter::setUseColor ( bool  Value)
inline

Definition at line 153 of file MCInstPrinter.h.

References UseColor.

◆ setUseMarkup()

void llvm::MCInstPrinter::setUseMarkup ( bool  Value)
inline

Definition at line 150 of file MCInstPrinter.h.

References UseMarkup.

Referenced by LLVMSetDisasmOptions().

Member Data Documentation

◆ CommentStream

raw_ostream* llvm::MCInstPrinter::CommentStream = nullptr
protected

◆ MAI

const MCAsmInfo& llvm::MCInstPrinter::MAI
protected

Definition at line 51 of file MCInstPrinter.h.

Referenced by llvm::HexagonInstPrinter::getMAI(), llvm::SystemZInstPrinter::printAddress(), llvm::AArch64InstPrinter::printAddSubImm(), llvm::AArch64InstPrinter::printAdrAdrpLabel(), llvm::ARMInstPrinter::printAdrLabelOperand(), llvm::AArch64InstPrinter::printAlignedLabel(), llvm::AArch64InstPrinter::printAMIndexedWB(), printAnnotation(), llvm::CSKYInstPrinter::printConstpool(), llvm::CSKYInstPrinter::printDataSymbol(), llvm::SystemZInstPrinter::printFormattedRegName(), llvm::LanaiInstPrinter::printHi16AndImmOperand(), llvm::LanaiInstPrinter::printHi16ImmOperand(), llvm::AArch64InstPrinter::printInst(), llvm::PPCInstPrinter::printInst(), llvm::R600InstPrinter::printLiteral(), llvm::LanaiInstPrinter::printLo16AndImmOperand(), llvm::LanaiInstPrinter::printMemImmOperand(), llvm::X86IntelInstPrinter::printMemOffset(), llvm::X86ATTInstPrinter::printMemOffset(), llvm::X86IntelInstPrinter::printMemReference(), llvm::X86ATTInstPrinter::printMemReference(), llvm::LanaiInstPrinter::printMemRiOperand(), llvm::LanaiInstPrinter::printMemSplsOperand(), llvm::SparcInstPrinter::printOperand(), llvm::VEInstPrinter::printOperand(), llvm::AArch64InstPrinter::printOperand(), llvm::ARMInstPrinter::printOperand(), llvm::PPCInstPrinter::printOperand(), llvm::CSKYInstPrinter::printOperand(), llvm::RISCVInstPrinter::printOperand(), llvm::R600InstPrinter::printOperand(), llvm::NVPTXInstPrinter::printOperand(), llvm::X86IntelInstPrinter::printOperand(), llvm::WebAssemblyInstPrinter::printOperand(), llvm::LanaiInstPrinter::printOperand(), llvm::X86ATTInstPrinter::printOperand(), llvm::SystemZInstPrinter::printOperand(), llvm::X86InstPrinterCommon::printPCRelImm(), llvm::SystemZInstPrinter::printRegName(), llvm::ARMInstPrinter::printThumbLdrLabelOperand(), llvm::PPCInstPrinter::printTLSCall(), llvm::X86IntelInstPrinter::printU8Imm(), and llvm::AArch64InstPrinter::printUImm12Offset().

◆ MIA

const MCInstrAnalysis* llvm::MCInstPrinter::MIA = nullptr
protected

◆ MII

const MCInstrInfo& llvm::MCInstPrinter::MII
protected

◆ MRI

const MCRegisterInfo& llvm::MCInstPrinter::MRI
protected

◆ PrintAliases

bool llvm::MCInstPrinter::PrintAliases = true
protected

◆ PrintBranchImmAsAddress

bool llvm::MCInstPrinter::PrintBranchImmAsAddress = false
protected

◆ PrintHexStyle

HexStyle::Style llvm::MCInstPrinter::PrintHexStyle = HexStyle::C
protected

Which style to use for printing hexadecimal values.

Definition at line 69 of file MCInstPrinter.h.

Referenced by formatHex(), and setPrintHexStyle().

◆ PrintImmHex

bool llvm::MCInstPrinter::PrintImmHex = false
protected

True if we are printing immediates as hex.

Definition at line 66 of file MCInstPrinter.h.

Referenced by formatImm(), getPrintImmHex(), and setPrintImmHex().

◆ SymbolizeOperands

bool llvm::MCInstPrinter::SymbolizeOperands = false
protected

If true, symbolize branch target and memory reference operands.

Definition at line 77 of file MCInstPrinter.h.

Referenced by llvm::X86IntelInstPrinter::printMemReference(), llvm::X86ATTInstPrinter::printMemReference(), llvm::X86InstPrinterCommon::printPCRelImm(), and setSymbolizeOperands().

◆ UseColor

bool llvm::MCInstPrinter::UseColor = false
protected

True if we are printing colored assembly.

Definition at line 60 of file MCInstPrinter.h.

Referenced by getUseColor(), and setUseColor().

◆ UseMarkup

bool llvm::MCInstPrinter::UseMarkup = false
protected

True if we are printing marked up assembly.

Definition at line 57 of file MCInstPrinter.h.

Referenced by getUseMarkup(), and setUseMarkup().


The documentation for this class was generated from the following files: