36#define GET_REGINFO_MC_DESC
37#include "ARMGenRegisterInfo.inc"
42 (
MI.getOperand(0).isImm() &&
MI.getOperand(0).getImm() == 15) &&
43 (
MI.getOperand(1).isImm() &&
MI.getOperand(1).getImm() == 0) &&
46 (
MI.getOperand(3).isImm() &&
MI.getOperand(3).getImm() == 7)) {
47 if ((
MI.getOperand(5).isImm() &&
MI.getOperand(5).getImm() == 4)) {
48 if (
MI.getOperand(4).isImm() &&
MI.getOperand(4).getImm() == 5) {
49 Info =
"deprecated since v7, use 'isb'";
55 if (
MI.getOperand(4).isImm() &&
MI.getOperand(4).getImm() == 10) {
56 Info =
"deprecated since v7, use 'dsb'";
62 if (
MI.getOperand(4).isImm() &&
MI.getOperand(4).getImm() == 10 &&
63 (
MI.getOperand(5).isImm() &&
MI.getOperand(5).getImm() == 5)) {
64 Info =
"deprecated since v7, use 'dmb'";
69 ((
MI.getOperand(0).isImm() &&
MI.getOperand(0).getImm() == 10) ||
70 (
MI.getOperand(0).isImm() &&
MI.getOperand(0).getImm() == 11))) {
71 Info =
"since v7, cp10 and cp11 are reserved for advanced SIMD or floating "
81 ((
MI.getOperand(1).isImm() &&
MI.getOperand(1).getImm() == 10) ||
82 (
MI.getOperand(1).isImm() &&
MI.getOperand(1).getImm() == 11))) {
83 Info =
"since v7, cp10 and cp11 are reserved for advanced SIMD or floating "
93 "cannot predicate thumb instructions");
95 assert(
MI.getNumOperands() >= 4 &&
"expected >= 4 arguments");
96 for (
unsigned OI = 4, OE =
MI.getNumOperands(); OI < OE; ++OI) {
97 assert(
MI.getOperand(OI).isReg() &&
"expected register");
98 if (
MI.getOperand(OI).getReg() == ARM::PC) {
99 Info =
"use of PC in the list is deprecated";
109 "cannot predicate thumb instructions");
111 assert(
MI.getNumOperands() >= 4 &&
"expected >= 4 arguments");
112 bool ListContainsPC =
false, ListContainsLR =
false;
113 for (
unsigned OI = 4, OE =
MI.getNumOperands(); OI < OE; ++OI) {
114 assert(
MI.getOperand(OI).isReg() &&
"expected register");
115 switch (
MI.getOperand(OI).getReg().id()) {
119 ListContainsLR =
true;
122 ListContainsPC =
true;
127 if (ListContainsPC && ListContainsLR) {
128 Info =
"use of LR and PC simultaneously in the list is deprecated";
135#define GET_INSTRINFO_MC_DESC
136#define ENABLE_INSTR_PREDICATE_VERIFIER
137#include "ARMGenInstrInfo.inc"
139#define GET_SUBTARGETINFO_MC_DESC
140#include "ARMGenSubtargetInfo.inc"
143 std::string ARMArchFeature;
146 if (ArchID != ARM::ArchKind::INVALID && (CPU.
empty() || CPU ==
"generic"))
150 if (!ARMArchFeature.empty())
151 ARMArchFeature +=
",";
152 ARMArchFeature +=
"+thumb-mode,+v4t";
155 if (TT.isOSWindows()) {
156 if (!ARMArchFeature.empty())
157 ARMArchFeature +=
",";
158 ARMArchFeature +=
"+noarm";
161 return ARMArchFeature;
166 int PredOpIdx =
Desc.findFirstPredOperandIdx();
167 return PredOpIdx != -1 &&
MI.getOperand(PredOpIdx).getImm() !=
ARMCC::AL;
172 for (
unsigned I = 0;
I <
MI.getNumOperands(); ++
I) {
175 Desc.operands()[
I].isOptionalDef())
204 ArchFS = (
Twine(ArchFS) +
"," + FS).str();
206 ArchFS = std::string(FS);
209 return createARMMCSubtargetInfoImpl(TT, CPU, CPU, ArchFS);
214 InitARMMCInstrInfo(
X);
220 static const struct {
224 {codeview::RegisterId::ARM_R0, ARM::R0},
225 {codeview::RegisterId::ARM_R1, ARM::R1},
226 {codeview::RegisterId::ARM_R2, ARM::R2},
227 {codeview::RegisterId::ARM_R3, ARM::R3},
228 {codeview::RegisterId::ARM_R4, ARM::R4},
229 {codeview::RegisterId::ARM_R5, ARM::R5},
230 {codeview::RegisterId::ARM_R6, ARM::R6},
231 {codeview::RegisterId::ARM_R7, ARM::R7},
232 {codeview::RegisterId::ARM_R8, ARM::R8},
233 {codeview::RegisterId::ARM_R9, ARM::R9},
234 {codeview::RegisterId::ARM_R10, ARM::R10},
235 {codeview::RegisterId::ARM_R11, ARM::R11},
236 {codeview::RegisterId::ARM_R12, ARM::R12},
237 {codeview::RegisterId::ARM_SP, ARM::SP},
238 {codeview::RegisterId::ARM_LR, ARM::LR},
239 {codeview::RegisterId::ARM_PC, ARM::PC},
240 {codeview::RegisterId::ARM_CPSR, ARM::CPSR},
241 {codeview::RegisterId::ARM_FPSCR, ARM::FPSCR},
242 {codeview::RegisterId::ARM_FPEXC, ARM::FPEXC},
243 {codeview::RegisterId::ARM_FS0, ARM::S0},
244 {codeview::RegisterId::ARM_FS1, ARM::S1},
245 {codeview::RegisterId::ARM_FS2, ARM::S2},
246 {codeview::RegisterId::ARM_FS3, ARM::S3},
247 {codeview::RegisterId::ARM_FS4, ARM::S4},
248 {codeview::RegisterId::ARM_FS5, ARM::S5},
249 {codeview::RegisterId::ARM_FS6, ARM::S6},
250 {codeview::RegisterId::ARM_FS7, ARM::S7},
251 {codeview::RegisterId::ARM_FS8, ARM::S8},
252 {codeview::RegisterId::ARM_FS9, ARM::S9},
253 {codeview::RegisterId::ARM_FS10, ARM::S10},
254 {codeview::RegisterId::ARM_FS11, ARM::S11},
255 {codeview::RegisterId::ARM_FS12, ARM::S12},
256 {codeview::RegisterId::ARM_FS13, ARM::S13},
257 {codeview::RegisterId::ARM_FS14, ARM::S14},
258 {codeview::RegisterId::ARM_FS15, ARM::S15},
259 {codeview::RegisterId::ARM_FS16, ARM::S16},
260 {codeview::RegisterId::ARM_FS17, ARM::S17},
261 {codeview::RegisterId::ARM_FS18, ARM::S18},
262 {codeview::RegisterId::ARM_FS19, ARM::S19},
263 {codeview::RegisterId::ARM_FS20, ARM::S20},
264 {codeview::RegisterId::ARM_FS21, ARM::S21},
265 {codeview::RegisterId::ARM_FS22, ARM::S22},
266 {codeview::RegisterId::ARM_FS23, ARM::S23},
267 {codeview::RegisterId::ARM_FS24, ARM::S24},
268 {codeview::RegisterId::ARM_FS25, ARM::S25},
269 {codeview::RegisterId::ARM_FS26, ARM::S26},
270 {codeview::RegisterId::ARM_FS27, ARM::S27},
271 {codeview::RegisterId::ARM_FS28, ARM::S28},
272 {codeview::RegisterId::ARM_FS29, ARM::S29},
273 {codeview::RegisterId::ARM_FS30, ARM::S30},
274 {codeview::RegisterId::ARM_FS31, ARM::S31},
275 {codeview::RegisterId::ARM_ND0, ARM::D0},
276 {codeview::RegisterId::ARM_ND1, ARM::D1},
277 {codeview::RegisterId::ARM_ND2, ARM::D2},
278 {codeview::RegisterId::ARM_ND3, ARM::D3},
279 {codeview::RegisterId::ARM_ND4, ARM::D4},
280 {codeview::RegisterId::ARM_ND5, ARM::D5},
281 {codeview::RegisterId::ARM_ND6, ARM::D6},
282 {codeview::RegisterId::ARM_ND7, ARM::D7},
283 {codeview::RegisterId::ARM_ND8, ARM::D8},
284 {codeview::RegisterId::ARM_ND9, ARM::D9},
285 {codeview::RegisterId::ARM_ND10, ARM::D10},
286 {codeview::RegisterId::ARM_ND11, ARM::D11},
287 {codeview::RegisterId::ARM_ND12, ARM::D12},
288 {codeview::RegisterId::ARM_ND13, ARM::D13},
289 {codeview::RegisterId::ARM_ND14, ARM::D14},
290 {codeview::RegisterId::ARM_ND15, ARM::D15},
291 {codeview::RegisterId::ARM_ND16,
ARM::D16},
292 {codeview::RegisterId::ARM_ND17, ARM::D17},
293 {codeview::RegisterId::ARM_ND18, ARM::D18},
294 {codeview::RegisterId::ARM_ND19, ARM::D19},
295 {codeview::RegisterId::ARM_ND20, ARM::D20},
296 {codeview::RegisterId::ARM_ND21, ARM::D21},
297 {codeview::RegisterId::ARM_ND22, ARM::D22},
298 {codeview::RegisterId::ARM_ND23, ARM::D23},
299 {codeview::RegisterId::ARM_ND24, ARM::D24},
300 {codeview::RegisterId::ARM_ND25, ARM::D25},
301 {codeview::RegisterId::ARM_ND26, ARM::D26},
302 {codeview::RegisterId::ARM_ND27, ARM::D27},
303 {codeview::RegisterId::ARM_ND28, ARM::D28},
304 {codeview::RegisterId::ARM_ND29, ARM::D29},
305 {codeview::RegisterId::ARM_ND30, ARM::D30},
306 {codeview::RegisterId::ARM_ND31, ARM::D31},
307 {codeview::RegisterId::ARM_NQ0, ARM::Q0},
308 {codeview::RegisterId::ARM_NQ1, ARM::Q1},
309 {codeview::RegisterId::ARM_NQ2, ARM::Q2},
310 {codeview::RegisterId::ARM_NQ3, ARM::Q3},
311 {codeview::RegisterId::ARM_NQ4, ARM::Q4},
312 {codeview::RegisterId::ARM_NQ5, ARM::Q5},
313 {codeview::RegisterId::ARM_NQ6, ARM::Q6},
314 {codeview::RegisterId::ARM_NQ7, ARM::Q7},
315 {codeview::RegisterId::ARM_NQ8, ARM::Q8},
316 {codeview::RegisterId::ARM_NQ9, ARM::Q9},
317 {codeview::RegisterId::ARM_NQ10, ARM::Q10},
318 {codeview::RegisterId::ARM_NQ11, ARM::Q11},
319 {codeview::RegisterId::ARM_NQ12, ARM::Q12},
320 {codeview::RegisterId::ARM_NQ13, ARM::Q13},
321 {codeview::RegisterId::ARM_NQ14, ARM::Q14},
322 {codeview::RegisterId::ARM_NQ15, ARM::Q15},
324 for (
const auto &
I : RegMap)
325 MRI->mapLLVMRegToCVReg(
I.Reg,
static_cast<int>(
I.CVReg));
330 InitARMMCRegisterInfo(
X, ARM::LR, 0, 0, ARM::PC);
348 unsigned Reg =
MRI.getDwarfRegNum(ARM::SP,
true);
355 std::unique_ptr<MCAsmBackend> &&MAB,
356 std::unique_ptr<MCObjectWriter> &&OW,
357 std::unique_ptr<MCCodeEmitter> &&
Emitter) {
359 Ctx, std::move(MAB), std::move(OW), std::move(
Emitter),
366 std::unique_ptr<MCObjectWriter> &&OW,
367 std::unique_ptr<MCCodeEmitter> &&
Emitter) {
373 unsigned SyntaxVariant,
377 if (SyntaxVariant == 0)
384 if (TT.isOSBinFormatMachO())
415 for (
unsigned OpNum = 0; OpNum <
Desc.getNumOperands(); ++OpNum) {
426 std::optional<uint64_t>
430 std::vector<std::pair<uint64_t, uint64_t>>
437static std::optional<uint64_t>
441 if (MemOpIndex + 1 >=
Desc.getNumOperands())
449 int32_t OffImm = (int32_t)MO2.
getImm();
451 if (OffImm == INT32_MIN)
453 return Addr + OffImm;
456static std::optional<uint64_t>
459 if (MemOpIndex + 2 >=
Desc.getNumOperands())
472 return Addr - ImmOffs;
473 return Addr + ImmOffs;
476static std::optional<uint64_t>
479 if (MemOpIndex + 1 >=
Desc.getNumOperands())
491 return Addr - ImmOffs * 4;
492 return Addr + ImmOffs * 4;
495static std::optional<uint64_t>
498 if (MemOpIndex + 1 >=
Desc.getNumOperands())
510 return Addr - ImmOffs * 2;
511 return Addr + ImmOffs * 2;
514static std::optional<uint64_t>
518 if (MemOpIndex + 1 >=
Desc.getNumOperands())
526 int32_t OffImm = (int32_t)MO2.
getImm();
527 assert(((OffImm & 0x3) == 0) &&
"Not a valid immediate!");
530 if (OffImm == INT32_MIN)
532 return Addr + OffImm;
535static std::optional<uint64_t>
543 int32_t OffImm = (int32_t)MO1.
getImm();
546 if (OffImm == INT32_MIN)
548 return Addr + OffImm;
551static std::optional<uint64_t>
558std::optional<uint64_t> ARMMCInstrAnalysis::evaluateMemoryOperandAddress(
623template <
typename T,
size_t N>
626 for (
size_t I = 0;
I <
N; ++
I) {
627 T Val = support::endian::read<T>(Buf +
I *
sizeof(
T), E);
634std::vector<std::pair<uint64_t, uint64_t>>
635ARMMCInstrAnalysis::findPltEntries(
uint64_t PltSectionVA,
642 STI.
checkFeatures(
"+big-endian-instructions") ? endianness::big
643 : endianness::little;
646 std::vector<std::pair<uint64_t, uint64_t>>
Result;
660 if ((MovwPart1 & 0xffb0) != 0xf200)
664 PltContents.
data() + Byte + 2, InstrEndianness);
665 if ((MovwPart2 & 0x8f00) != 0xc00)
668 uint64_t OffsetLower = (MovwPart2 & 0xff) + ((MovwPart2 & 0x7000) >> 4) +
669 ((MovwPart1 & 0x400) << 1) +
670 ((MovwPart1 & 0xf) << 12);
673 PltContents.
data() + Byte + 4, InstrEndianness);
674 if ((MovtPart1 & 0xfbf0) != 0xf2c0)
678 PltContents.
data() + Byte + 6, InstrEndianness);
679 if ((MovtPart2 & 0x8f00) != 0xc00)
683 ((MovtPart2 & 0xff) << 16) + ((MovtPart2 & 0x7000) << 12) +
684 ((MovtPart1 & 0x400) << 17) + ((MovtPart1 & 0xf) << 28);
721 PltContents.
data() +
Byte + 12, DataEndianness);
733 if ((Add1 & 0xe28fc600) != 0xe28fc600)
737 if ((Add2 & 0xe28cca00) != 0xe28cca00)
741 if ((Ldr & 0xe5bcf000) != 0xe5bcf000)
746 ((Add2 & 0xff) << 12) + (Ldr & 0xfff);
756 return new ARMMCInstrAnalysis(
Info);
unsigned const MachineRegisterInfo * MRI
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static std::optional< uint64_t > evaluateMemOpAddrForAddrMode_i12(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static bool getARMStoreDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info)
static bool getARMLoadDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info)
static std::optional< uint64_t > evaluateMemOpAddrForAddrModeT1_s(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static MCStreamer * createARMMachOStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&MAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
static std::optional< uint64_t > evaluateMemOpAddrForAddrMode3(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static MCInstrAnalysis * createARMMCInstrAnalysis(const MCInstrInfo *Info)
static std::optional< uint64_t > evaluateMemOpAddrForAddrMode5FP16(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static bool instructionsMatch(const T(&Insns)[N], const uint8_t *Buf, llvm::endianness E)
static std::optional< uint64_t > evaluateMemOpAddrForAddrModeT2_pc(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static bool getMCRDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info)
static std::optional< uint64_t > evaluateMemOpAddrForAddrMode5(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
static MCStreamer * createELFStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&MAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
static MCInstrInfo * createARMMCInstrInfo()
static MCRelocationInfo * createARMMCRelocationInfo(const Triple &TT, MCContext &Ctx)
static MCInstPrinter * createARMMCInstPrinter(const Triple &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
static MCRegisterInfo * createARMMCRegisterInfo(const Triple &Triple)
static bool getMRCDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info)
static std::optional< uint64_t > evaluateMemOpAddrForAddrModeT2_i8s4(const MCInst &Inst, const MCInstrDesc &Desc, unsigned MemOpIndex, uint64_t Addr)
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeARMTargetMC()
static MCAsmInfo * createARMMCAsmInfo(const MCRegisterInfo &MRI, const Triple &TheTriple, const MCTargetOptions &Options)
Analysis containing CSE Info
#define LLVM_EXTERNAL_VISIBILITY
dxil DXContainer Global Emitter
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
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, int64_t 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 getOpcode() const
const MCOperand & getOperand(unsigned i) const
virtual std::vector< std::pair< uint64_t, uint64_t > > findPltEntries(uint64_t PltSectionVA, ArrayRef< uint8_t > PltContents, const MCSubtargetInfo &STI) const
Returns (PLT virtual address, GOT virtual address) pairs for PLT entries.
virtual bool isUnconditionalBranch(const MCInst &Inst) 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 bool isConditionalBranch(const MCInst &Inst) const
virtual std::optional< uint64_t > evaluateMemoryOperandAddress(const MCInst &Inst, const MCSubtargetInfo *STI, uint64_t Addr, uint64_t Size) const
Given an instruction tries to get the address of a memory operand.
Describe properties that are true of each instruction in the target description file.
unsigned getOpcode() const
Return the opcode number for this descriptor.
Interface to description of machine instruction set.
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode.
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...
Create MCExprs from relocations found in an object file.
Streaming machine code generation interface.
Generic base class for all target subtargets.
bool checkFeatures(StringRef FS) const
Check whether the subtarget features are enabled/disabled as per the provided string,...
bool hasFeature(unsigned Feature) const
const Triple & getTargetTriple() const
const FeatureBitset & getFeatureBits() const
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.
LLVM_ABI bool isLittleEndian() const
Tests whether the target triple is little endian.
bool isOSWindows() const
Tests whether the OS is Windows.
bool isOSDarwin() const
Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, DriverKit, XROS, or bridgeOS).
bool isWindowsMSVCEnvironment() const
Checks if the environment could be MSVC.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
IndexMode
ARM Index Modes.
unsigned char getAM3Offset(unsigned AM3Opc)
unsigned char getAM5FP16Offset(unsigned AM5Opc)
AddrOpc getAM5Op(unsigned AM5Opc)
AddrOpc getAM5FP16Op(unsigned AM5Opc)
unsigned char getAM5Offset(unsigned AM5Opc)
AddrOpc getAM3Op(unsigned AM3Opc)
MCSubtargetInfo * createARMMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
Create a ARM MCSubtargetInfo instance.
std::string ParseARMTriple(const Triple &TT, StringRef CPU)
bool isCPSRDefined(const MCInst &MI, const MCInstrInfo *MCII)
void initLLVMToCVRegMapping(MCRegisterInfo *MRI)
bool isPredicated(const MCInst &MI, const MCInstrInfo *MCII)
uint64_t evaluateBranchTarget(const MCInstrDesc &InstDesc, uint64_t Addr, int64_t Imm)
LLVM_ABI StringRef getArchName(ArchKind AK)
LLVM_ABI ArchKind parseArch(StringRef Arch)
bool isCDECoproc(size_t Coproc, const MCSubtargetInfo &STI)
@ D16
Only 16 D registers.
uint32_t read32(const void *P, endianness E)
uint16_t read16(const void *P, endianness E)
This is an optimization pass for GlobalISel generic memory operations.
MCELFStreamer * createARMELFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter, bool IsThumb, bool IsAndroid)
Target & getTheThumbBETarget()
MCCodeEmitter * createARMLEMCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)
MCAsmBackend * createARMBEAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
MCAsmBackend * createARMLEAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
MCRelocationInfo * createARMMachORelocationInfo(MCContext &Ctx)
Construct ARM Mach-O relocation info.
LLVM_ABI MCStreamer * createMachOStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE, bool DWARFMustBeAtTheEnd, bool LabelSections=false)
LLVM_ABI MCRelocationInfo * createMCRelocationInfo(const Triple &TT, MCContext &Ctx)
MCTargetStreamer * createARMObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
Target & getTheARMLETarget()
MCTargetStreamer * createARMNullTargetStreamer(MCStreamer &S)
MCCodeEmitter * createARMBEMCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)
MCStreamer * createARMWinCOFFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > &&MAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
MCTargetStreamer * createARMTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint)
Target & getTheARMBETarget()
Target & getTheThumbLETarget()
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)
static void RegisterMCRelocationInfo(Target &T, Target::MCRelocationInfoCtorTy Fn)
RegisterMCRelocationInfo - Register an MCRelocationInfo implementation for the given target.