mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-21 00:32:23 +00:00
44dcfd3625
with the newer, cleaner model. It uses the IAPrinter class to hold the information that is needed to match an instruction with its alias. This also takes into account the available features of the platform. There is one bit of ugliness. The way the logic determines if a pattern is unique is O(N**2), which is gross. But in reality, the number of items it's checking against isn't large. So while it's N**2, it shouldn't be a massive time sink. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129110 91177308-0d34-0410-b5e6-96231b3b80d8
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
//===-- MCInstPrinter.h - Convert an MCInst to target assembly syntax -----===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_MC_MCINSTPRINTER_H
|
|
#define LLVM_MC_MCINSTPRINTER_H
|
|
|
|
namespace llvm {
|
|
class MCInst;
|
|
class raw_ostream;
|
|
class MCAsmInfo;
|
|
class StringRef;
|
|
|
|
/// MCInstPrinter - This is an instance of a target assembly language printer
|
|
/// that converts an MCInst to valid target assembly syntax.
|
|
class MCInstPrinter {
|
|
protected:
|
|
/// CommentStream - a stream that comments can be emitted to if desired.
|
|
/// Each comment must end with a newline. This will be null if verbose
|
|
/// assembly emission is disable.
|
|
raw_ostream *CommentStream;
|
|
const MCAsmInfo &MAI;
|
|
|
|
/// The current set of available features.
|
|
unsigned AvailableFeatures;
|
|
public:
|
|
MCInstPrinter(const MCAsmInfo &mai)
|
|
: CommentStream(0), MAI(mai), AvailableFeatures(0) {}
|
|
|
|
virtual ~MCInstPrinter();
|
|
|
|
/// setCommentStream - Specify a stream to emit comments to.
|
|
void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
|
|
|
|
/// printInst - Print the specified MCInst to the specified raw_ostream.
|
|
///
|
|
virtual void printInst(const MCInst *MI, raw_ostream &OS) = 0;
|
|
|
|
/// getOpcodeName - Return the name of the specified opcode enum (e.g.
|
|
/// "MOV32ri") or empty if we can't resolve it.
|
|
virtual StringRef getOpcodeName(unsigned Opcode) const;
|
|
|
|
/// getRegName - Return the assembler register name.
|
|
virtual StringRef getRegName(unsigned RegNo) const;
|
|
|
|
unsigned getAvailableFeatures() const { return AvailableFeatures; }
|
|
void setAvailableFeatures(unsigned Value) { AvailableFeatures = Value; }
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|