LLVM: lib/MC/MCInstPrinter.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
20#include
21#include
22
23using namespace llvm;
24
26 static const char hex_rep[] = "0123456789abcdef";
27 bool First = true;
28 for (char i: bytes) {
31 else
32 OS << ' ';
33 OS << hex_rep[(i & 0xF0) >> 4];
34 OS << hex_rep[i & 0xF];
35 }
36}
37
39
40
41
43 return MII.getName(Opcode);
44}
45
49
51 if (!Annot.empty()) {
53 (*CommentStream) << Annot;
54
55
56 if (Annot.back() != '\n')
57 (*CommentStream) << '\n';
58 } else
59 OS << " " << MAI.getCommentString() << " " << Annot;
60 }
61}
62
68 bool &OrPredicateResult) {
69
74
75
76
79 return true;
80 }
83 return true;
84 }
86 bool Res = OrPredicateResult;
87 OrPredicateResult = false;
88 return Res;
89 }
90
91
94
95
96 switch (C.Kind) {
98
99 return Opnd.isImm() && Opnd.getImm() == int32_t(C.Value);
101
102 return Opnd.isReg() && Opnd.getReg() == C.Value;
104
105 return Opnd.isReg() && Opnd.getReg() == MI.getOperand(C.Value).getReg();
107
110 return Opnd.isReg() && MRI.getRegClass(RCID).contains(Opnd.getReg());
111 }
113
114 return Opnd.isReg() && MRI.getRegClass(C.Value).contains(Opnd.getReg());
116
117 return M.ValidateMCOperand(Opnd, *STI, C.Value);
119
120 return true;
127 }
129}
130
134
135
136 auto It = lower_bound(M.OpToPatterns, MI->getOpcode(),
138 return L.Opcode < Opcode;
139 });
140 if (It == M.OpToPatterns.end() || It->Opcode != MI->getOpcode())
141 return nullptr;
142
143
146 M.Patterns.slice(It->PatternStart, It->NumPatterns);
148
149 if (MI->getNumOperands() != P.NumOperands)
150 return nullptr;
151
152
154 M.PatternConds.slice(P.AliasCondStart, P.NumConds);
155 unsigned OpIdx = 0;
156 bool OrPredicateResult = false;
159 OrPredicateResult);
160 })) {
161
162 AsmStrOffset = P.AsmStrOffset;
163 break;
164 }
165 }
166
167
168 if (AsmStrOffset == ~0U)
169 return nullptr;
170
171
172
173
174 assert(AsmStrOffset < M.AsmStrings.size() &&
175 (AsmStrOffset == 0 || M.AsmStrings[AsmStrOffset - 1] == '\0') &&
176 "bad asm string offset");
177 return M.AsmStrings.data() + AsmStrOffset;
178}
179
180
182{
184 {
186 if (digit != 0)
187 return (digit >= 0xa);
189 }
190 return false;
191}
192
196
201 if (Value == std::numeric_limits<int64_t>::min())
204 }
208 if (Value == std::numeric_limits<int64_t>::min())
213 }
217 }
219}
220
233
237
239 Markup M, bool EnableMarkup,
240 bool EnableColor)
241 : IP(IP), OS(OS), EnableMarkup(EnableMarkup), EnableColor(EnableColor) {
242 if (EnableColor) {
244 switch (M) {
247 break;
250 break;
253 break;
256 break;
257 }
258 IP.ColorStack.push_back(Color);
259 OS.changeColor(Color);
260 }
261
262 if (EnableMarkup) {
263 switch (M) {
265 OS << "<imm:";
266 break;
268 OS << "<reg:";
269 break;
271 OS << "<target:";
272 break;
274 OS << "<mem:";
275 break;
276 }
277 }
278}
279
281 if (EnableMarkup)
282 OS << '>';
283 if (!EnableColor)
284 return;
285 IP.ColorStack.pop_back();
286 OS << IP.ColorStack.back();
287}
unsigned const MachineRegisterInfo * MRI
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static bool needsLeadingZero(uint64_t Value)
Definition MCInstPrinter.cpp:181
static bool matchAliasCondition(const MCInst &MI, const MCSubtargetInfo *STI, const MCInstrInfo &MII, const MCRegisterInfo &MRI, unsigned &OpIdx, const AliasMatchingData &M, const AliasPatternCond &C, bool &OrPredicateResult)
Definition MCInstPrinter.cpp:63
MachineInstr unsigned OpIdx
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
ArrayRef< T > slice(size_t N, size_t M) const
slice(n, m) - Chop off the first N elements of the array, and keep M elements in the array.
constexpr bool test(unsigned I) const
LLVM_ABI ~WithMarkup()
Definition MCInstPrinter.cpp:280
LLVM_CTOR_NODISCARD LLVM_ABI WithMarkup(MCInstPrinter &IP, raw_ostream &OS, Markup M, bool EnableMarkup, bool EnableColor)
Definition MCInstPrinter.cpp:238
WithMarkup markup(raw_ostream &OS, Markup M)
Definition MCInstPrinter.cpp:234
format_object< int64_t > formatHex(int64_t Value) const
Definition MCInstPrinter.cpp:197
raw_ostream * CommentStream
A stream that comments can be emitted to if desired.
StringRef getOpcodeName(unsigned Opcode) const
Return the name of the specified opcode enum (e.g.
Definition MCInstPrinter.cpp:42
format_object< int64_t > formatDec(int64_t Value) const
Utility functions to print decimal/hexadecimal values.
Definition MCInstPrinter.cpp:193
const MCRegisterInfo & MRI
void printAnnotation(raw_ostream &OS, StringRef Annot)
Utility function for printing annotations.
Definition MCInstPrinter.cpp:50
bool getUseMarkup() const
virtual void printRegName(raw_ostream &OS, MCRegister Reg)
Print the assembler register name.
Definition MCInstPrinter.cpp:46
const char * matchAliasPatterns(const MCInst *MI, const MCSubtargetInfo *STI, const AliasMatchingData &M)
Helper for matching MCInsts to alias patterns when printing instructions.
Definition MCInstPrinter.cpp:131
MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, const MCRegisterInfo &mri)
HexStyle::Style PrintHexStyle
Which style to use for printing hexadecimal values.
Instances of this class represent a single low-level machine instruction.
Interface to description of machine instruction set.
const int16_t * getRegClassByHwModeTable(unsigned ModeId) const
Instances of this class represent operands of the MCInst class.
MCRegister getReg() const
Returns the register number.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Wrapper class representing physical registers. Should be passed by value.
Generic base class for all target subtargets.
const FeatureBitset & getFeatureBits() const
virtual unsigned getHwMode(enum HwModeType type=HwMode_Default) const
HwMode ID corresponding to the 'type' parameter is retrieved from the HwMode bit set of the current s...
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
LLVM Value Representation.
This class implements an extremely fast bulk output stream that can only output to a stream.
static constexpr Colors GREEN
static constexpr Colors RED
static constexpr Colors YELLOW
static constexpr Colors CYAN
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
LLVM_ABI void dumpBytes(ArrayRef< uint8_t > Bytes, raw_ostream &OS)
Convert ‘Bytes’ to a hex string and output to ‘OS’.
Definition MCInstPrinter.cpp:25
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
Tablegenerated data structures needed to match alias patterns.
Data for each alias pattern.
Map from opcode to pattern list by binary search.