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.