36#define GET_INSTRINFO_MC_DESC
37#define GET_INSTRINFO_MC_HELPERS
38#define ENABLE_INSTR_PREDICATE_VERIFIER
39#include "AArch64GenInstrInfo.inc"
41#define GET_SUBTARGETINFO_MC_DESC
42#include "AArch64GenSubtargetInfo.inc"
44#define GET_REGINFO_MC_DESC
45#include "AArch64GenRegisterInfo.inc"
49 InitAArch64MCInstrInfo(
X);
66 return createAArch64MCSubtargetInfoImpl(TT, CPU, CPU, FS);
75 {codeview::RegisterId::ARM64_W0, AArch64::W0},
76 {codeview::RegisterId::ARM64_W1, AArch64::W1},
77 {codeview::RegisterId::ARM64_W2, AArch64::W2},
78 {codeview::RegisterId::ARM64_W3, AArch64::W3},
79 {codeview::RegisterId::ARM64_W4, AArch64::W4},
80 {codeview::RegisterId::ARM64_W5, AArch64::W5},
81 {codeview::RegisterId::ARM64_W6, AArch64::W6},
82 {codeview::RegisterId::ARM64_W7, AArch64::W7},
83 {codeview::RegisterId::ARM64_W8, AArch64::W8},
84 {codeview::RegisterId::ARM64_W9, AArch64::W9},
85 {codeview::RegisterId::ARM64_W10, AArch64::W10},
86 {codeview::RegisterId::ARM64_W11, AArch64::W11},
87 {codeview::RegisterId::ARM64_W12, AArch64::W12},
88 {codeview::RegisterId::ARM64_W13, AArch64::W13},
89 {codeview::RegisterId::ARM64_W14, AArch64::W14},
90 {codeview::RegisterId::ARM64_W15, AArch64::W15},
91 {codeview::RegisterId::ARM64_W16, AArch64::W16},
92 {codeview::RegisterId::ARM64_W17, AArch64::W17},
93 {codeview::RegisterId::ARM64_W18, AArch64::W18},
94 {codeview::RegisterId::ARM64_W19, AArch64::W19},
95 {codeview::RegisterId::ARM64_W20, AArch64::W20},
96 {codeview::RegisterId::ARM64_W21, AArch64::W21},
97 {codeview::RegisterId::ARM64_W22, AArch64::W22},
98 {codeview::RegisterId::ARM64_W23, AArch64::W23},
99 {codeview::RegisterId::ARM64_W24, AArch64::W24},
100 {codeview::RegisterId::ARM64_W25, AArch64::W25},
101 {codeview::RegisterId::ARM64_W26, AArch64::W26},
102 {codeview::RegisterId::ARM64_W27, AArch64::W27},
103 {codeview::RegisterId::ARM64_W28, AArch64::W28},
104 {codeview::RegisterId::ARM64_W29, AArch64::W29},
105 {codeview::RegisterId::ARM64_W30, AArch64::W30},
106 {codeview::RegisterId::ARM64_WZR, AArch64::WZR},
107 {codeview::RegisterId::ARM64_X0, AArch64::X0},
108 {codeview::RegisterId::ARM64_X1, AArch64::X1},
109 {codeview::RegisterId::ARM64_X2, AArch64::X2},
110 {codeview::RegisterId::ARM64_X3, AArch64::X3},
111 {codeview::RegisterId::ARM64_X4, AArch64::X4},
112 {codeview::RegisterId::ARM64_X5, AArch64::X5},
113 {codeview::RegisterId::ARM64_X6, AArch64::X6},
114 {codeview::RegisterId::ARM64_X7, AArch64::X7},
115 {codeview::RegisterId::ARM64_X8, AArch64::X8},
116 {codeview::RegisterId::ARM64_X9, AArch64::X9},
117 {codeview::RegisterId::ARM64_X10, AArch64::X10},
118 {codeview::RegisterId::ARM64_X11, AArch64::X11},
119 {codeview::RegisterId::ARM64_X12, AArch64::X12},
120 {codeview::RegisterId::ARM64_X13, AArch64::X13},
121 {codeview::RegisterId::ARM64_X14, AArch64::X14},
122 {codeview::RegisterId::ARM64_X15, AArch64::X15},
123 {codeview::RegisterId::ARM64_X16, AArch64::X16},
124 {codeview::RegisterId::ARM64_X17, AArch64::X17},
125 {codeview::RegisterId::ARM64_X18, AArch64::X18},
126 {codeview::RegisterId::ARM64_X19, AArch64::X19},
127 {codeview::RegisterId::ARM64_X20, AArch64::X20},
128 {codeview::RegisterId::ARM64_X21, AArch64::X21},
129 {codeview::RegisterId::ARM64_X22, AArch64::X22},
130 {codeview::RegisterId::ARM64_X23, AArch64::X23},
131 {codeview::RegisterId::ARM64_X24, AArch64::X24},
132 {codeview::RegisterId::ARM64_X25, AArch64::X25},
133 {codeview::RegisterId::ARM64_X26, AArch64::X26},
134 {codeview::RegisterId::ARM64_X27, AArch64::X27},
135 {codeview::RegisterId::ARM64_X28, AArch64::X28},
136 {codeview::RegisterId::ARM64_FP, AArch64::FP},
137 {codeview::RegisterId::ARM64_LR, AArch64::LR},
138 {codeview::RegisterId::ARM64_SP, AArch64::SP},
139 {codeview::RegisterId::ARM64_ZR, AArch64::XZR},
140 {codeview::RegisterId::ARM64_NZCV, AArch64::NZCV},
141 {codeview::RegisterId::ARM64_S0, AArch64::S0},
142 {codeview::RegisterId::ARM64_S1, AArch64::S1},
143 {codeview::RegisterId::ARM64_S2, AArch64::S2},
144 {codeview::RegisterId::ARM64_S3, AArch64::S3},
145 {codeview::RegisterId::ARM64_S4, AArch64::S4},
146 {codeview::RegisterId::ARM64_S5, AArch64::S5},
147 {codeview::RegisterId::ARM64_S6, AArch64::S6},
148 {codeview::RegisterId::ARM64_S7, AArch64::S7},
149 {codeview::RegisterId::ARM64_S8, AArch64::S8},
150 {codeview::RegisterId::ARM64_S9, AArch64::S9},
151 {codeview::RegisterId::ARM64_S10, AArch64::S10},
152 {codeview::RegisterId::ARM64_S11, AArch64::S11},
153 {codeview::RegisterId::ARM64_S12, AArch64::S12},
154 {codeview::RegisterId::ARM64_S13, AArch64::S13},
155 {codeview::RegisterId::ARM64_S14, AArch64::S14},
156 {codeview::RegisterId::ARM64_S15, AArch64::S15},
157 {codeview::RegisterId::ARM64_S16, AArch64::S16},
158 {codeview::RegisterId::ARM64_S17, AArch64::S17},
159 {codeview::RegisterId::ARM64_S18, AArch64::S18},
160 {codeview::RegisterId::ARM64_S19, AArch64::S19},
161 {codeview::RegisterId::ARM64_S20, AArch64::S20},
162 {codeview::RegisterId::ARM64_S21, AArch64::S21},
163 {codeview::RegisterId::ARM64_S22, AArch64::S22},
164 {codeview::RegisterId::ARM64_S23, AArch64::S23},
165 {codeview::RegisterId::ARM64_S24, AArch64::S24},
166 {codeview::RegisterId::ARM64_S25, AArch64::S25},
167 {codeview::RegisterId::ARM64_S26, AArch64::S26},
168 {codeview::RegisterId::ARM64_S27, AArch64::S27},
169 {codeview::RegisterId::ARM64_S28, AArch64::S28},
170 {codeview::RegisterId::ARM64_S29, AArch64::S29},
171 {codeview::RegisterId::ARM64_S30, AArch64::S30},
172 {codeview::RegisterId::ARM64_S31, AArch64::S31},
173 {codeview::RegisterId::ARM64_D0, AArch64::D0},
174 {codeview::RegisterId::ARM64_D1, AArch64::D1},
175 {codeview::RegisterId::ARM64_D2, AArch64::D2},
176 {codeview::RegisterId::ARM64_D3, AArch64::D3},
177 {codeview::RegisterId::ARM64_D4, AArch64::D4},
178 {codeview::RegisterId::ARM64_D5, AArch64::D5},
179 {codeview::RegisterId::ARM64_D6, AArch64::D6},
180 {codeview::RegisterId::ARM64_D7, AArch64::D7},
181 {codeview::RegisterId::ARM64_D8, AArch64::D8},
182 {codeview::RegisterId::ARM64_D9, AArch64::D9},
183 {codeview::RegisterId::ARM64_D10, AArch64::D10},
184 {codeview::RegisterId::ARM64_D11, AArch64::D11},
185 {codeview::RegisterId::ARM64_D12, AArch64::D12},
186 {codeview::RegisterId::ARM64_D13, AArch64::D13},
187 {codeview::RegisterId::ARM64_D14, AArch64::D14},
188 {codeview::RegisterId::ARM64_D15, AArch64::D15},
189 {codeview::RegisterId::ARM64_D16, AArch64::D16},
190 {codeview::RegisterId::ARM64_D17, AArch64::D17},
191 {codeview::RegisterId::ARM64_D18, AArch64::D18},
192 {codeview::RegisterId::ARM64_D19, AArch64::D19},
193 {codeview::RegisterId::ARM64_D20, AArch64::D20},
194 {codeview::RegisterId::ARM64_D21, AArch64::D21},
195 {codeview::RegisterId::ARM64_D22, AArch64::D22},
196 {codeview::RegisterId::ARM64_D23, AArch64::D23},
197 {codeview::RegisterId::ARM64_D24, AArch64::D24},
198 {codeview::RegisterId::ARM64_D25, AArch64::D25},
199 {codeview::RegisterId::ARM64_D26, AArch64::D26},
200 {codeview::RegisterId::ARM64_D27, AArch64::D27},
201 {codeview::RegisterId::ARM64_D28, AArch64::D28},
202 {codeview::RegisterId::ARM64_D29, AArch64::D29},
203 {codeview::RegisterId::ARM64_D30, AArch64::D30},
204 {codeview::RegisterId::ARM64_D31, AArch64::D31},
205 {codeview::RegisterId::ARM64_Q0, AArch64::Q0},
206 {codeview::RegisterId::ARM64_Q1, AArch64::Q1},
207 {codeview::RegisterId::ARM64_Q2, AArch64::Q2},
208 {codeview::RegisterId::ARM64_Q3, AArch64::Q3},
209 {codeview::RegisterId::ARM64_Q4, AArch64::Q4},
210 {codeview::RegisterId::ARM64_Q5, AArch64::Q5},
211 {codeview::RegisterId::ARM64_Q6, AArch64::Q6},
212 {codeview::RegisterId::ARM64_Q7, AArch64::Q7},
213 {codeview::RegisterId::ARM64_Q8, AArch64::Q8},
214 {codeview::RegisterId::ARM64_Q9, AArch64::Q9},
215 {codeview::RegisterId::ARM64_Q10, AArch64::Q10},
216 {codeview::RegisterId::ARM64_Q11, AArch64::Q11},
217 {codeview::RegisterId::ARM64_Q12, AArch64::Q12},
218 {codeview::RegisterId::ARM64_Q13, AArch64::Q13},
219 {codeview::RegisterId::ARM64_Q14, AArch64::Q14},
220 {codeview::RegisterId::ARM64_Q15, AArch64::Q15},
221 {codeview::RegisterId::ARM64_Q16, AArch64::Q16},
222 {codeview::RegisterId::ARM64_Q17, AArch64::Q17},
223 {codeview::RegisterId::ARM64_Q18, AArch64::Q18},
224 {codeview::RegisterId::ARM64_Q19, AArch64::Q19},
225 {codeview::RegisterId::ARM64_Q20, AArch64::Q20},
226 {codeview::RegisterId::ARM64_Q21, AArch64::Q21},
227 {codeview::RegisterId::ARM64_Q22, AArch64::Q22},
228 {codeview::RegisterId::ARM64_Q23, AArch64::Q23},
229 {codeview::RegisterId::ARM64_Q24, AArch64::Q24},
230 {codeview::RegisterId::ARM64_Q25, AArch64::Q25},
231 {codeview::RegisterId::ARM64_Q26, AArch64::Q26},
232 {codeview::RegisterId::ARM64_Q27, AArch64::Q27},
233 {codeview::RegisterId::ARM64_Q28, AArch64::Q28},
234 {codeview::RegisterId::ARM64_Q29, AArch64::Q29},
235 {codeview::RegisterId::ARM64_Q30, AArch64::Q30},
236 {codeview::RegisterId::ARM64_Q31, AArch64::Q31},
237 {codeview::RegisterId::ARM64_B0, AArch64::B0},
238 {codeview::RegisterId::ARM64_B1, AArch64::B1},
239 {codeview::RegisterId::ARM64_B2, AArch64::B2},
240 {codeview::RegisterId::ARM64_B3, AArch64::B3},
241 {codeview::RegisterId::ARM64_B4, AArch64::B4},
242 {codeview::RegisterId::ARM64_B5, AArch64::B5},
243 {codeview::RegisterId::ARM64_B6, AArch64::B6},
244 {codeview::RegisterId::ARM64_B7, AArch64::B7},
245 {codeview::RegisterId::ARM64_B8, AArch64::B8},
246 {codeview::RegisterId::ARM64_B9, AArch64::B9},
247 {codeview::RegisterId::ARM64_B10, AArch64::B10},
248 {codeview::RegisterId::ARM64_B11, AArch64::B11},
249 {codeview::RegisterId::ARM64_B12, AArch64::B12},
250 {codeview::RegisterId::ARM64_B13, AArch64::B13},
251 {codeview::RegisterId::ARM64_B14, AArch64::B14},
252 {codeview::RegisterId::ARM64_B15, AArch64::B15},
253 {codeview::RegisterId::ARM64_B16, AArch64::B16},
254 {codeview::RegisterId::ARM64_B17, AArch64::B17},
255 {codeview::RegisterId::ARM64_B18, AArch64::B18},
256 {codeview::RegisterId::ARM64_B19, AArch64::B19},
257 {codeview::RegisterId::ARM64_B20, AArch64::B20},
258 {codeview::RegisterId::ARM64_B21, AArch64::B21},
259 {codeview::RegisterId::ARM64_B22, AArch64::B22},
260 {codeview::RegisterId::ARM64_B23, AArch64::B23},
261 {codeview::RegisterId::ARM64_B24, AArch64::B24},
262 {codeview::RegisterId::ARM64_B25, AArch64::B25},
263 {codeview::RegisterId::ARM64_B26, AArch64::B26},
264 {codeview::RegisterId::ARM64_B27, AArch64::B27},
265 {codeview::RegisterId::ARM64_B28, AArch64::B28},
266 {codeview::RegisterId::ARM64_B29, AArch64::B29},
267 {codeview::RegisterId::ARM64_B30, AArch64::B30},
268 {codeview::RegisterId::ARM64_B31, AArch64::B31},
269 {codeview::RegisterId::ARM64_H0, AArch64::H0},
270 {codeview::RegisterId::ARM64_H1, AArch64::H1},
271 {codeview::RegisterId::ARM64_H2, AArch64::H2},
272 {codeview::RegisterId::ARM64_H3, AArch64::H3},
273 {codeview::RegisterId::ARM64_H4, AArch64::H4},
274 {codeview::RegisterId::ARM64_H5, AArch64::H5},
275 {codeview::RegisterId::ARM64_H6, AArch64::H6},
276 {codeview::RegisterId::ARM64_H7, AArch64::H7},
277 {codeview::RegisterId::ARM64_H8, AArch64::H8},
278 {codeview::RegisterId::ARM64_H9, AArch64::H9},
279 {codeview::RegisterId::ARM64_H10, AArch64::H10},
280 {codeview::RegisterId::ARM64_H11, AArch64::H11},
281 {codeview::RegisterId::ARM64_H12, AArch64::H12},
282 {codeview::RegisterId::ARM64_H13, AArch64::H13},
283 {codeview::RegisterId::ARM64_H14, AArch64::H14},
284 {codeview::RegisterId::ARM64_H15, AArch64::H15},
285 {codeview::RegisterId::ARM64_H16, AArch64::H16},
286 {codeview::RegisterId::ARM64_H17, AArch64::H17},
287 {codeview::RegisterId::ARM64_H18, AArch64::H18},
288 {codeview::RegisterId::ARM64_H19, AArch64::H19},
289 {codeview::RegisterId::ARM64_H20, AArch64::H20},
290 {codeview::RegisterId::ARM64_H21, AArch64::H21},
291 {codeview::RegisterId::ARM64_H22, AArch64::H22},
292 {codeview::RegisterId::ARM64_H23, AArch64::H23},
293 {codeview::RegisterId::ARM64_H24, AArch64::H24},
294 {codeview::RegisterId::ARM64_H25, AArch64::H25},
295 {codeview::RegisterId::ARM64_H26, AArch64::H26},
296 {codeview::RegisterId::ARM64_H27, AArch64::H27},
297 {codeview::RegisterId::ARM64_H28, AArch64::H28},
298 {codeview::RegisterId::ARM64_H29, AArch64::H29},
299 {codeview::RegisterId::ARM64_H30, AArch64::H30},
300 {codeview::RegisterId::ARM64_H31, AArch64::H31},
302 for (
const auto &
I : RegMap)
303 MRI->mapLLVMRegToCVReg(
I.Reg,
static_cast<int>(
I.CVReg));
307 const auto &FPR16 = AArch64MCRegisterClasses[AArch64::FPR16RegClassID];
309 return Op.isReg() && FPR16.contains(
Op.getReg());
314 const auto &FPR128 = AArch64MCRegisterClasses[AArch64::FPR128RegClassID];
316 return Op.isReg() && FPR128.contains(
Op.getReg());
321 const auto &FPR128 = AArch64MCRegisterClasses[AArch64::FPR128RegClassID];
322 const auto &FPR64 = AArch64MCRegisterClasses[AArch64::FPR64RegClassID];
323 const auto &FPR32 = AArch64MCRegisterClasses[AArch64::FPR32RegClassID];
324 const auto &FPR16 = AArch64MCRegisterClasses[AArch64::FPR16RegClassID];
325 const auto &FPR8 = AArch64MCRegisterClasses[AArch64::FPR8RegClassID];
330 auto Reg =
Op.getReg();
331 return FPR128.contains(Reg) || FPR64.contains(Reg) || FPR32.contains(Reg) ||
332 FPR16.contains(Reg) || FPR8.contains(Reg);
340 InitAArch64MCRegisterInfo(
X, AArch64::LR);
361 unsigned Reg =
MRI.getDwarfRegNum(AArch64::SP,
true);
369 unsigned SyntaxVariant,
373 if (SyntaxVariant == 0)
375 if (SyntaxVariant == 1)
382 std::unique_ptr<MCAsmBackend> &&TAB,
383 std::unique_ptr<MCObjectWriter> &&OW,
384 std::unique_ptr<MCCodeEmitter> &&
Emitter) {
390 std::unique_ptr<MCAsmBackend> &&TAB,
391 std::unique_ptr<MCObjectWriter> &&OW,
392 std::unique_ptr<MCCodeEmitter> &&
Emitter,
393 bool DWARFMustBeAtTheEnd) {
395 std::move(
Emitter), DWARFMustBeAtTheEnd,
401 std::unique_ptr<MCObjectWriter> &&OW,
402 std::unique_ptr<MCCodeEmitter> &&
Emitter,
403 bool IncrementalLinkerCompatible) {
406 IncrementalLinkerCompatible);
426 else if (Inst.
getOpcode() == AArch64::ADRP)
437 APInt &Mask)
const override {
439 unsigned NumDefs =
Desc.getNumDefs();
440 unsigned NumImplicitDefs =
Desc.implicit_defs().size();
441 assert(
Mask.getBitWidth() == NumDefs + NumImplicitDefs &&
442 "Unexpected number of bits in the mask!");
451 MRI.getRegClass(AArch64::FPR128RegClassID);
453 auto ClearsSuperReg = [=](
unsigned RegID) {
470 for (
unsigned I = 0, E = NumDefs;
I < E; ++
I) {
472 if (ClearsSuperReg(
Op.getReg()))
476 for (
unsigned I = 0, E = NumImplicitDefs;
I < E; ++
I) {
478 if (ClearsSuperReg(Reg))
479 Mask.setBit(NumDefs +
I);
482 return Mask.getBoolValue();
485 std::vector<std::pair<uint64_t, uint64_t>>
487 const Triple &TargetTriple)
const override {
489 std::vector<std::pair<uint64_t, uint64_t>>
Result;
495 if (
Insn == 0xd503245f) {
500 if ((
Insn & 0x9f000000) != 0x90000000)
504 (((
Insn >> 29) & 3) << 12) + (((
Insn >> 5) & 0x3ffff) << 14);
508 if (Insn2 >> 22 == 0x3e5) {
509 Imm += ((Insn2 >> 10) & 0xfff) << 3;
510 Result.push_back(std::make_pair(PltSectionVA + Byte, Imm));
521 return new AArch64MCInstrAnalysis(
Info);
unsigned const MachineRegisterInfo * MRI
static MCStreamer * createWinCOFFStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter, bool IncrementalLinkerCompatible)
static MCStreamer * createELFStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
static MCInstPrinter * createAArch64MCInstPrinter(const Triple &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
static MCSubtargetInfo * createAArch64MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
static MCRegisterInfo * createAArch64MCRegisterInfo(const Triple &Triple)
static MCStreamer * createMachOStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter, bool DWARFMustBeAtTheEnd)
static MCInstrInfo * createAArch64MCInstrInfo()
LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64TargetMC()
static MCInstrAnalysis * createAArch64InstrAnalysis(const MCInstrInfo *Info)
static MCAsmInfo * createAArch64MCAsmInfo(const MCRegisterInfo &MRI, const Triple &TheTriple, const MCTargetOptions &Options)
SmallVector< AArch64_IMM::ImmInsnModel, 4 > Insn
Analysis containing CSE Info
#define LLVM_EXTERNAL_VISIBILITY
dxil DXContainer Global Emitter
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Class for arbitrary precision integers.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
This class represents an Operation in the Expression.
This class is intended to be used as a base class for asm properties and features specific to the tar...
void addInitialFrameState(const MCCFIInstruction &Inst)
static MCCFIInstruction cfiDefCfa(MCSymbol *L, unsigned Register, int Offset, SMLoc Loc={})
.cfi_def_cfa defines a rule for computing CFA as: take address from Register and add Offset to it.
Context object for machine code objects.
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Instances of this class represent a single low-level machine instruction.
unsigned getNumOperands() const
unsigned getOpcode() const
const MCOperand & getOperand(unsigned i) const
virtual bool evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size, uint64_t &Target) const
Given a branch instruction try to get the address the branch targets.
virtual std::vector< std::pair< uint64_t, uint64_t > > findPltEntries(uint64_t PltSectionVA, ArrayRef< uint8_t > PltContents, const Triple &TargetTriple) const
Returns (PLT virtual address, GOT virtual address) pairs for PLT entries.
virtual bool clearsSuperRegisters(const MCRegisterInfo &MRI, const MCInst &Inst, APInt &Writes) const
Returns true if at least one of the register writes performed by.
Describe properties that are true of each instruction in the target description file.
Interface to description of machine instruction set.
Instances of this class represent operands of the MCInst class.
MCRegisterClass - Base class of TargetRegisterClass.
bool contains(MCRegister Reg) const
contains - Return true if the specified register is included in this register class.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Streaming machine code generation interface.
Generic base class for all target subtargets.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
bool isOSBinFormatMachO() const
Tests whether the environment is MachO.
ArchType getArch() const
Get the parsed architecture type of this triple.
bool isOSBinFormatCOFF() const
Tests whether the OS uses the COFF binary format.
bool isOSBinFormatELF() const
Tests whether the OS uses the ELF binary format.
bool isWindowsMSVCEnvironment() const
Checks if the environment could be MSVC.
bool isHForm(const MCInst &MI, const MCInstrInfo *MCII)
void initLLVMToCVRegMapping(MCRegisterInfo *MRI)
bool isQForm(const MCInst &MI, const MCInstrInfo *MCII)
bool isFpOrNEON(const MCInst &MI, const MCInstrInfo *MCII)
StringRef resolveCPUAlias(StringRef CPU)
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
Reg
All possible values of the reg field in the ModR/M byte.
uint32_t read32le(const void *P)
This is an optimization pass for GlobalISel generic memory operations.
MCWinCOFFStreamer * createAArch64WinCOFFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter, bool IncrementalLinkerCompatible)
Target & getTheAArch64beTarget()
Target & getTheAArch64leTarget()
MCTargetStreamer * createAArch64NullTargetStreamer(MCStreamer &S)
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
MCAsmBackend * createAArch64leAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
Target & getTheAArch64_32Target()
Target & getTheARM64_32Target()
MCTargetStreamer * createAArch64AsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint, bool isVerboseAsm)
Target & getTheARM64Target()
DWARFExpression::Operation Op
MCAsmBackend * createAArch64beAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
MCELFStreamer * createAArch64ELFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)
MCTargetStreamer * createAArch64ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
MCCodeEmitter * createAArch64MCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)
Description of the encoding of one expression Op.
RegisterMCAsmInfoFn - Helper template for registering a target assembly info implementation.
static void RegisterMCRegInfo(Target &T, Target::MCRegInfoCtorFnTy Fn)
RegisterMCRegInfo - Register a MCRegisterInfo implementation for the given target.
static void RegisterMCAsmBackend(Target &T, Target::MCAsmBackendCtorTy Fn)
RegisterMCAsmBackend - Register a MCAsmBackend implementation for the given target.
static void RegisterMCCodeEmitter(Target &T, Target::MCCodeEmitterCtorTy Fn)
RegisterMCCodeEmitter - Register a MCCodeEmitter implementation for the given target.
static void RegisterMCSubtargetInfo(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)
RegisterMCSubtargetInfo - Register a MCSubtargetInfo implementation for the given target.
static void RegisterObjectTargetStreamer(Target &T, Target::ObjectTargetStreamerCtorTy Fn)
static void RegisterMCInstrAnalysis(Target &T, Target::MCInstrAnalysisCtorFnTy Fn)
RegisterMCInstrAnalysis - Register a MCInstrAnalysis implementation for the given target.
static void RegisterELFStreamer(Target &T, Target::ELFStreamerCtorTy Fn)
static void RegisterNullTargetStreamer(Target &T, Target::NullTargetStreamerCtorTy Fn)
static void RegisterMCInstPrinter(Target &T, Target::MCInstPrinterCtorTy Fn)
RegisterMCInstPrinter - Register a MCInstPrinter implementation for the given target.
static void RegisterCOFFStreamer(Target &T, Target::COFFStreamerCtorTy Fn)
static void RegisterMCInstrInfo(Target &T, Target::MCInstrInfoCtorFnTy Fn)
RegisterMCInstrInfo - Register a MCInstrInfo implementation for the given target.
static void RegisterMachOStreamer(Target &T, Target::MachOStreamerCtorTy Fn)
static void RegisterAsmTargetStreamer(Target &T, Target::AsmTargetStreamerCtorTy Fn)