diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 267 |
1 files changed, 156 insertions, 111 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 6f26ca127f94..d6c1efa6327c 100644 --- a/contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/contrib/llvm-project/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -57,26 +57,36 @@ ARMAsmPrinter::ARMAsmPrinter(TargetMachine &TM, : AsmPrinter(TM, std::move(Streamer)), Subtarget(nullptr), AFI(nullptr), MCP(nullptr), InConstantPool(false), OptimizationGoals(-1) {} -void ARMAsmPrinter::EmitFunctionBodyEnd() { +void ARMAsmPrinter::emitFunctionBodyEnd() { // Make sure to terminate any constant pools that were at the end // of the function. if (!InConstantPool) return; InConstantPool = false; - OutStreamer->EmitDataRegion(MCDR_DataRegionEnd); + OutStreamer->emitDataRegion(MCDR_DataRegionEnd); } -void ARMAsmPrinter::EmitFunctionEntryLabel() { +void ARMAsmPrinter::emitFunctionEntryLabel() { if (AFI->isThumbFunction()) { - OutStreamer->EmitAssemblerFlag(MCAF_Code16); - OutStreamer->EmitThumbFunc(CurrentFnSym); + OutStreamer->emitAssemblerFlag(MCAF_Code16); + OutStreamer->emitThumbFunc(CurrentFnSym); } else { - OutStreamer->EmitAssemblerFlag(MCAF_Code32); + OutStreamer->emitAssemblerFlag(MCAF_Code32); } - OutStreamer->EmitLabel(CurrentFnSym); + + // Emit symbol for CMSE non-secure entry point + if (AFI->isCmseNSEntryFunction()) { + MCSymbol *S = + OutContext.getOrCreateSymbol("__acle_se_" + CurrentFnSym->getName()); + emitLinkage(&MF->getFunction(), S); + OutStreamer->emitSymbolAttribute(S, MCSA_ELF_TypeFunction); + OutStreamer->emitLabel(S); + } + + OutStreamer->emitLabel(CurrentFnSym); } -void ARMAsmPrinter::EmitXXStructor(const DataLayout &DL, const Constant *CV) { +void ARMAsmPrinter::emitXXStructor(const DataLayout &DL, const Constant *CV) { uint64_t Size = getDataLayout().getTypeAllocSize(CV->getType()); assert(Size && "C++ constructor pointer had zero size!"); @@ -90,17 +100,17 @@ void ARMAsmPrinter::EmitXXStructor(const DataLayout &DL, const Constant *CV) { : MCSymbolRefExpr::VK_None), OutContext); - OutStreamer->EmitValue(E, Size); + OutStreamer->emitValue(E, Size); } -void ARMAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { +void ARMAsmPrinter::emitGlobalVariable(const GlobalVariable *GV) { if (PromotedGlobals.count(GV)) // The global was promoted into a constant pool. It should not be emitted. return; - AsmPrinter::EmitGlobalVariable(GV); + AsmPrinter::emitGlobalVariable(GV); } -/// runOnMachineFunction - This uses the EmitInstruction() +/// runOnMachineFunction - This uses the emitInstruction() /// method to print assembly for each instruction. /// bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) { @@ -158,7 +168,7 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) { } // Emit the rest of the function body. - EmitFunctionBody(); + emitFunctionBody(); // Emit the XRay table for this function. emitXRayTable(); @@ -167,10 +177,10 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) { // These are created per function, rather than per TU, since it's // relatively easy to exceed the thumb branch range within a TU. if (! ThumbIndirectPads.empty()) { - OutStreamer->EmitAssemblerFlag(MCAF_Code16); - EmitAlignment(Align(2)); + OutStreamer->emitAssemblerFlag(MCAF_Code16); + emitAlignment(Align(2)); for (std::pair<unsigned, MCSymbol *> &TIP : ThumbIndirectPads) { - OutStreamer->EmitLabel(TIP.second); + OutStreamer->emitLabel(TIP.second); EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tBX) .addReg(TIP.first) // Add predicate operands. @@ -467,14 +477,14 @@ void ARMAsmPrinter::emitInlineAsmEnd(const MCSubtargetInfo &StartInfo, // the start mode, then restore the start mode. const bool WasThumb = isThumb(StartInfo); if (!EndInfo || WasThumb != isThumb(*EndInfo)) { - OutStreamer->EmitAssemblerFlag(WasThumb ? MCAF_Code16 : MCAF_Code32); + OutStreamer->emitAssemblerFlag(WasThumb ? MCAF_Code16 : MCAF_Code32); } } -void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) { +void ARMAsmPrinter::emitStartOfAsmFile(Module &M) { const Triple &TT = TM.getTargetTriple(); // Use unified assembler syntax. - OutStreamer->EmitAssemblerFlag(MCAF_SyntaxUnified); + OutStreamer->emitAssemblerFlag(MCAF_SyntaxUnified); // Emit ARM Build Attributes if (TT.isOSBinFormatELF()) @@ -484,20 +494,20 @@ void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) { // if we're thumb for the purposes of the top level code16 assembler // flag. if (!M.getModuleInlineAsm().empty() && TT.isThumb()) - OutStreamer->EmitAssemblerFlag(MCAF_Code16); + OutStreamer->emitAssemblerFlag(MCAF_Code16); } static void emitNonLazySymbolPointer(MCStreamer &OutStreamer, MCSymbol *StubLabel, MachineModuleInfoImpl::StubValueTy &MCSym) { // L_foo$stub: - OutStreamer.EmitLabel(StubLabel); + OutStreamer.emitLabel(StubLabel); // .indirect_symbol _foo - OutStreamer.EmitSymbolAttribute(MCSym.getPointer(), MCSA_IndirectSymbol); + OutStreamer.emitSymbolAttribute(MCSym.getPointer(), MCSA_IndirectSymbol); if (MCSym.getInt()) // External to current translation unit. - OutStreamer.EmitIntValue(0, 4/*size*/); + OutStreamer.emitIntValue(0, 4/*size*/); else // Internal to current translation unit. // @@ -505,13 +515,13 @@ emitNonLazySymbolPointer(MCStreamer &OutStreamer, MCSymbol *StubLabel, // pointers need to be indirect and pc-rel. We accomplish this by // using NLPs; however, sometimes the types are local to the file. // We need to fill in the value for the NLP in those cases. - OutStreamer.EmitValue( + OutStreamer.emitValue( MCSymbolRefExpr::create(MCSym.getPointer(), OutStreamer.getContext()), 4 /*size*/); } -void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { +void ARMAsmPrinter::emitEndOfAsmFile(Module &M) { const Triple &TT = TM.getTargetTriple(); if (TT.isOSBinFormatMachO()) { // All darwin targets use mach-o. @@ -526,7 +536,7 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { if (!Stubs.empty()) { // Switch with ".non_lazy_symbol_pointer" directive. OutStreamer->SwitchSection(TLOFMacho.getNonLazySymbolPointerSection()); - EmitAlignment(Align(4)); + emitAlignment(Align(4)); for (auto &Stub : Stubs) emitNonLazySymbolPointer(*OutStreamer, Stub.first, Stub.second); @@ -539,7 +549,7 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { if (!Stubs.empty()) { // Switch with ".non_lazy_symbol_pointer" directive. OutStreamer->SwitchSection(TLOFMacho.getThreadLocalPointerSection()); - EmitAlignment(Align(4)); + emitAlignment(Align(4)); for (auto &Stub : Stubs) emitNonLazySymbolPointer(*OutStreamer, Stub.first, Stub.second); @@ -553,7 +563,7 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { // implementation of multiple entry points). If this doesn't occur, the // linker can safely perform dead code stripping. Since LLVM never // generates code that does this, it is always safe to set. - OutStreamer->EmitAssemblerFlag(MCAF_SubsectionsViaSymbols); + OutStreamer->emitAssemblerFlag(MCAF_SubsectionsViaSymbols); } // The last attribute to be emitted is ABI_optimization_goals @@ -570,18 +580,28 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { } //===----------------------------------------------------------------------===// -// Helper routines for EmitStartOfAsmFile() and EmitEndOfAsmFile() +// Helper routines for emitStartOfAsmFile() and emitEndOfAsmFile() // FIXME: // The following seem like one-off assembler flags, but they actually need // to appear in the .ARM.attributes section in ELF. // Instead of subclassing the MCELFStreamer, we do the work here. -// Returns true if all functions have the same function attribute value. -// It also returns true when the module has no functions. + // Returns true if all functions have the same function attribute value. + // It also returns true when the module has no functions. static bool checkFunctionsAttributeConsistency(const Module &M, StringRef Attr, StringRef Value) { + return !any_of(M, [&](const Function &F) { + return F.getFnAttribute(Attr).getValueAsString() != Value; + }); +} +// Returns true if all functions have the same denormal mode. +// It also returns true when the module has no functions. +static bool checkDenormalAttributeConsistency(const Module &M, + StringRef Attr, + DenormalMode Value) { return !any_of(M, [&](const Function &F) { - return F.getFnAttribute(Attr).getValueAsString() != Value; + StringRef AttrVal = F.getFnAttribute(Attr).getValueAsString(); + return parseDenormalFPAttribute(AttrVal) != Value; }); } @@ -606,11 +626,12 @@ void ARMAsmPrinter::emitAttributes() { if (!ArchFS.empty()) ArchFS = (Twine(ArchFS) + "," + FS).str(); else - ArchFS = FS; + ArchFS = std::string(FS); } const ARMBaseTargetMachine &ATM = static_cast<const ARMBaseTargetMachine &>(TM); - const ARMSubtarget STI(TT, CPU, ArchFS, ATM, ATM.isLittleEndian()); + const ARMSubtarget STI(TT, std::string(CPU), ArchFS, ATM, + ATM.isLittleEndian()); // Emit build attributes for the available hardware. ATS.emitTargetAttributes(STI); @@ -641,16 +662,13 @@ void ARMAsmPrinter::emitAttributes() { } // Set FP Denormals. - if (checkFunctionsAttributeConsistency(*MMI->getModule(), - "denormal-fp-math", - "preserve-sign") || - TM.Options.FPDenormalMode == FPDenormal::PreserveSign) + if (checkDenormalAttributeConsistency(*MMI->getModule(), "denormal-fp-math", + DenormalMode::getPreserveSign())) ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal, ARMBuildAttrs::PreserveFPSign); - else if (checkFunctionsAttributeConsistency(*MMI->getModule(), - "denormal-fp-math", - "positive-zero") || - TM.Options.FPDenormalMode == FPDenormal::PositiveZero) + else if (checkDenormalAttributeConsistency(*MMI->getModule(), + "denormal-fp-math", + DenormalMode::getPositiveZero())) ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal, ARMBuildAttrs::PositiveZero); else if (!TM.Options.UnsafeFPMath) @@ -855,8 +873,8 @@ MCSymbol *ARMAsmPrinter::GetARMGVSymbol(const GlobalValue *GV, llvm_unreachable("unexpected target"); } -void ARMAsmPrinter:: -EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) { +void ARMAsmPrinter::emitMachineConstantPoolValue( + MachineConstantPoolValue *MCPV) { const DataLayout &DL = getDataLayout(); int Size = DL.getTypeAllocSize(MCPV->getType()); @@ -876,11 +894,11 @@ EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) { for (const auto *GV : ACPC->promotedGlobals()) { if (!EmittedPromotedGlobalLabels.count(GV)) { MCSymbol *GVSym = getSymbol(GV); - OutStreamer->EmitLabel(GVSym); + OutStreamer->emitLabel(GVSym); EmittedPromotedGlobalLabels.insert(GV); } } - return EmitGlobalConstant(DL, ACPC->getPromotedGlobalInit()); + return emitGlobalConstant(DL, ACPC->getPromotedGlobalInit()); } MCSymbol *MCSym; @@ -925,29 +943,29 @@ EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) { // We want "(<expr> - .)", but MC doesn't have a concept of the '.' // label, so just emit a local label end reference that instead. MCSymbol *DotSym = OutContext.createTempSymbol(); - OutStreamer->EmitLabel(DotSym); + OutStreamer->emitLabel(DotSym); const MCExpr *DotExpr = MCSymbolRefExpr::create(DotSym, OutContext); PCRelExpr = MCBinaryExpr::createSub(PCRelExpr, DotExpr, OutContext); } Expr = MCBinaryExpr::createSub(Expr, PCRelExpr, OutContext); } - OutStreamer->EmitValue(Expr, Size); + OutStreamer->emitValue(Expr, Size); } -void ARMAsmPrinter::EmitJumpTableAddrs(const MachineInstr *MI) { +void ARMAsmPrinter::emitJumpTableAddrs(const MachineInstr *MI) { const MachineOperand &MO1 = MI->getOperand(1); unsigned JTI = MO1.getIndex(); // Make sure the Thumb jump table is 4-byte aligned. This will be a nop for // ARM mode tables. - EmitAlignment(Align(4)); + emitAlignment(Align(4)); // Emit a label for the jump table. MCSymbol *JTISymbol = GetARMJTIPICJumpTableLabel(JTI); - OutStreamer->EmitLabel(JTISymbol); + OutStreamer->emitLabel(JTISymbol); // Mark the jump table as data-in-code. - OutStreamer->EmitDataRegion(MCDR_DataRegionJT32); + OutStreamer->emitDataRegion(MCDR_DataRegionJT32); // Emit each entry of the table. const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); @@ -974,23 +992,23 @@ void ARMAsmPrinter::EmitJumpTableAddrs(const MachineInstr *MI) { else if (AFI->isThumbFunction()) Expr = MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(1,OutContext), OutContext); - OutStreamer->EmitValue(Expr, 4); + OutStreamer->emitValue(Expr, 4); } // Mark the end of jump table data-in-code region. - OutStreamer->EmitDataRegion(MCDR_DataRegionEnd); + OutStreamer->emitDataRegion(MCDR_DataRegionEnd); } -void ARMAsmPrinter::EmitJumpTableInsts(const MachineInstr *MI) { +void ARMAsmPrinter::emitJumpTableInsts(const MachineInstr *MI) { const MachineOperand &MO1 = MI->getOperand(1); unsigned JTI = MO1.getIndex(); // Make sure the Thumb jump table is 4-byte aligned. This will be a nop for // ARM mode tables. - EmitAlignment(Align(4)); + emitAlignment(Align(4)); // Emit a label for the jump table. MCSymbol *JTISymbol = GetARMJTIPICJumpTableLabel(JTI); - OutStreamer->EmitLabel(JTISymbol); + OutStreamer->emitLabel(JTISymbol); // Emit each entry of the table. const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); @@ -1008,17 +1026,17 @@ void ARMAsmPrinter::EmitJumpTableInsts(const MachineInstr *MI) { } } -void ARMAsmPrinter::EmitJumpTableTBInst(const MachineInstr *MI, +void ARMAsmPrinter::emitJumpTableTBInst(const MachineInstr *MI, unsigned OffsetWidth) { assert((OffsetWidth == 1 || OffsetWidth == 2) && "invalid tbb/tbh width"); const MachineOperand &MO1 = MI->getOperand(1); unsigned JTI = MO1.getIndex(); if (Subtarget->isThumb1Only()) - EmitAlignment(Align(4)); + emitAlignment(Align(4)); MCSymbol *JTISymbol = GetARMJTIPICJumpTableLabel(JTI); - OutStreamer->EmitLabel(JTISymbol); + OutStreamer->emitLabel(JTISymbol); // Emit each entry of the table. const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); @@ -1026,7 +1044,7 @@ void ARMAsmPrinter::EmitJumpTableTBInst(const MachineInstr *MI, const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs; // Mark the jump table as data-in-code. - OutStreamer->EmitDataRegion(OffsetWidth == 1 ? MCDR_DataRegionJT8 + OutStreamer->emitDataRegion(OffsetWidth == 1 ? MCDR_DataRegionJT8 : MCDR_DataRegionJT16); for (auto MBB : JTBBs) { @@ -1050,15 +1068,15 @@ void ARMAsmPrinter::EmitJumpTableTBInst(const MachineInstr *MI, Expr = MCBinaryExpr::createSub(MBBSymbolExpr, Expr, OutContext); Expr = MCBinaryExpr::createDiv(Expr, MCConstantExpr::create(2, OutContext), OutContext); - OutStreamer->EmitValue(Expr, OffsetWidth); + OutStreamer->emitValue(Expr, OffsetWidth); } // Mark the end of jump table data-in-code region. 32-bit offsets use // actual branch instructions here, so we don't mark those as a data-region // at all. - OutStreamer->EmitDataRegion(MCDR_DataRegionEnd); + OutStreamer->emitDataRegion(MCDR_DataRegionEnd); // Make sure the next instruction is 2-byte aligned. - EmitAlignment(Align(2)); + emitAlignment(Align(2)); } void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) { @@ -1076,16 +1094,26 @@ void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) { unsigned Opc = MI->getOpcode(); unsigned SrcReg, DstReg; - if (Opc == ARM::tPUSH || Opc == ARM::tLDRpci) { - // Two special cases: - // 1) tPUSH does not have src/dst regs. - // 2) for Thumb1 code we sometimes materialize the constant via constpool - // load. Yes, this is pretty fragile, but for now I don't see better - // way... :( + switch (Opc) { + case ARM::tPUSH: + // special case: tPUSH does not have src/dst regs. SrcReg = DstReg = ARM::SP; - } else { + break; + case ARM::tLDRpci: + case ARM::t2MOVi16: + case ARM::t2MOVTi16: + // special cases: + // 1) for Thumb1 code we sometimes materialize the constant via constpool + // load. + // 2) for Thumb2 execute only code we materialize the constant via + // immediate constants in 2 separate instructions (MOVW/MOVT). + SrcReg = ~0U; + DstReg = MI->getOperand(0).getReg(); + break; + default: SrcReg = MI->getOperand(1).getReg(); DstReg = MI->getOperand(0).getReg(); + break; } // Try to figure out the unwinding opcode out of src / dst regs. @@ -1189,23 +1217,11 @@ void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) { case ARM::tADDrSPi: Offset = -MI->getOperand(2).getImm()*4; break; - case ARM::tLDRpci: { - // Grab the constpool index and check, whether it corresponds to - // original or cloned constpool entry. - unsigned CPI = MI->getOperand(1).getIndex(); - const MachineConstantPool *MCP = MF.getConstantPool(); - if (CPI >= MCP->getConstants().size()) - CPI = AFI->getOriginalCPIdx(CPI); - assert(CPI != -1U && "Invalid constpool index"); - - // Derive the actual offset. - const MachineConstantPoolEntry &CPE = MCP->getConstants()[CPI]; - assert(!CPE.isMachineConstantPoolEntry() && "Invalid constpool entry"); - // FIXME: Check for user, it should be "add" instruction! - Offset = -cast<ConstantInt>(CPE.Val.ConstVal)->getSExtValue(); + case ARM::tADDhirr: + Offset = + -AFI->EHPrologueOffsetInRegs.lookup(MI->getOperand(2).getReg()); break; } - } if (MAI->getExceptionHandlingType() == ExceptionHandling::ARM) { if (DstReg == FramePtr && FramePtr != ARM::SP) @@ -1225,14 +1241,43 @@ void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) { } else if (DstReg == ARM::SP) { MI->print(errs()); llvm_unreachable("Unsupported opcode for unwinding information"); - } else if (Opc == ARM::tMOVr) { - // If a Thumb1 function spills r8-r11, we copy the values to low - // registers before pushing them. Record the copy so we can emit the - // correct ".save" later. - AFI->EHPrologueRemappedRegs[DstReg] = SrcReg; } else { - MI->print(errs()); - llvm_unreachable("Unsupported opcode for unwinding information"); + int64_t Offset = 0; + switch (Opc) { + case ARM::tMOVr: + // If a Thumb1 function spills r8-r11, we copy the values to low + // registers before pushing them. Record the copy so we can emit the + // correct ".save" later. + AFI->EHPrologueRemappedRegs[DstReg] = SrcReg; + break; + case ARM::tLDRpci: { + // Grab the constpool index and check, whether it corresponds to + // original or cloned constpool entry. + unsigned CPI = MI->getOperand(1).getIndex(); + const MachineConstantPool *MCP = MF.getConstantPool(); + if (CPI >= MCP->getConstants().size()) + CPI = AFI->getOriginalCPIdx(CPI); + assert(CPI != -1U && "Invalid constpool index"); + + // Derive the actual offset. + const MachineConstantPoolEntry &CPE = MCP->getConstants()[CPI]; + assert(!CPE.isMachineConstantPoolEntry() && "Invalid constpool entry"); + Offset = cast<ConstantInt>(CPE.Val.ConstVal)->getSExtValue(); + AFI->EHPrologueOffsetInRegs[DstReg] = Offset; + break; + } + case ARM::t2MOVi16: + Offset = MI->getOperand(1).getImm(); + AFI->EHPrologueOffsetInRegs[DstReg] = Offset; + break; + case ARM::t2MOVTi16: + Offset = MI->getOperand(2).getImm(); + AFI->EHPrologueOffsetInRegs[DstReg] |= (Offset << 16); + break; + default: + MI->print(errs()); + llvm_unreachable("Unsupported opcode for unwinding information"); + } } } } @@ -1241,7 +1286,7 @@ void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) { // instructions) auto-generated. #include "ARMGenMCPseudoLowering.inc" -void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { +void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) { const DataLayout &DL = getDataLayout(); MCTargetStreamer &TS = *OutStreamer->getTargetStreamer(); ARMTargetStreamer &ATS = static_cast<ARMTargetStreamer &>(TS); @@ -1252,7 +1297,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // If we just ended a constant pool, mark it as such. if (InConstantPool && MI->getOpcode() != ARM::CONSTPOOL_ENTRY) { - OutStreamer->EmitDataRegion(MCDR_DataRegionEnd); + OutStreamer->emitDataRegion(MCDR_DataRegionEnd); InConstantPool = false; } @@ -1513,7 +1558,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // This is a pseudo op for a label used by a branch future instruction // Emit the label. - OutStreamer->EmitLabel(getBFLabel(DL.getPrivateGlobalPrefix(), + OutStreamer->emitLabel(getBFLabel(DL.getPrivateGlobalPrefix(), getFunctionNumber(), MI->getOperand(0).getIndex(), OutContext)); return; @@ -1525,7 +1570,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // This adds the address of LPC0 to r0. // Emit the label. - OutStreamer->EmitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), + OutStreamer->emitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), getFunctionNumber(), MI->getOperand(2).getImm(), OutContext)); @@ -1546,7 +1591,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // This adds the address of LPC0 to r0. // Emit the label. - OutStreamer->EmitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), + OutStreamer->emitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), getFunctionNumber(), MI->getOperand(2).getImm(), OutContext)); @@ -1577,7 +1622,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // a PC-relative address at the ldr instruction. // Emit the label. - OutStreamer->EmitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), + OutStreamer->emitLabel(getPICLabel(DL.getPrivateGlobalPrefix(), getFunctionNumber(), MI->getOperand(2).getImm(), OutContext)); @@ -1620,28 +1665,28 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // If this is the first entry of the pool, mark it. if (!InConstantPool) { - OutStreamer->EmitDataRegion(MCDR_DataRegion); + OutStreamer->emitDataRegion(MCDR_DataRegion); InConstantPool = true; } - OutStreamer->EmitLabel(GetCPISymbol(LabelId)); + OutStreamer->emitLabel(GetCPISymbol(LabelId)); const MachineConstantPoolEntry &MCPE = MCP->getConstants()[CPIdx]; if (MCPE.isMachineConstantPoolEntry()) - EmitMachineConstantPoolValue(MCPE.Val.MachineCPVal); + emitMachineConstantPoolValue(MCPE.Val.MachineCPVal); else - EmitGlobalConstant(DL, MCPE.Val.ConstVal); + emitGlobalConstant(DL, MCPE.Val.ConstVal); return; } case ARM::JUMPTABLE_ADDRS: - EmitJumpTableAddrs(MI); + emitJumpTableAddrs(MI); return; case ARM::JUMPTABLE_INSTS: - EmitJumpTableInsts(MI); + emitJumpTableInsts(MI); return; case ARM::JUMPTABLE_TBB: case ARM::JUMPTABLE_TBH: - EmitJumpTableTBInst(MI, MI->getOpcode() == ARM::JUMPTABLE_TBB ? 1 : 2); + emitJumpTableTBInst(MI, MI->getOpcode() == ARM::JUMPTABLE_TBB ? 1 : 2); return; case ARM::t2BR_JT: { EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tMOVr) @@ -1656,7 +1701,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { case ARM::t2TBH_JT: { unsigned Opc = MI->getOpcode() == ARM::t2TBB_JT ? ARM::t2TBB : ARM::t2TBH; // Lower and emit the PC label, then the instruction itself. - OutStreamer->EmitLabel(GetCPISymbol(MI->getOperand(3).getImm())); + OutStreamer->emitLabel(GetCPISymbol(MI->getOperand(3).getImm())); EmitToStreamer(*OutStreamer, MCInstBuilder(Opc) .addReg(MI->getOperand(0).getReg()) .addReg(MI->getOperand(1).getReg()) @@ -1698,7 +1743,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { // FIXME: Ideally we could vary the LDRB index based on the padding // between the sequence and jump table, however that relies on MCExprs // for load indexes which are currently not supported. - OutStreamer->EmitCodeAlignment(4); + OutStreamer->emitCodeAlignment(4); EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tADDhirr) .addReg(Idx) .addReg(Idx) @@ -1740,7 +1785,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { .addImm(ARMCC::AL) .addReg(0)); - OutStreamer->EmitLabel(GetCPISymbol(MI->getOperand(3).getImm())); + OutStreamer->emitLabel(GetCPISymbol(MI->getOperand(3).getImm())); EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tADDhirr) .addReg(ARM::PC) .addReg(ARM::PC) @@ -1809,7 +1854,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { return; } case ARM::SPACE: - OutStreamer->EmitZeros(MI->getOperand(1).getImm()); + OutStreamer->emitZeros(MI->getOperand(1).getImm()); return; case ARM::TRAP: { // Non-Darwin binutils don't yet support the "trap" mnemonic. @@ -1904,7 +1949,7 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) { .addImm(ARMCC::AL) .addReg(0)); - OutStreamer->EmitLabel(Label); + OutStreamer->emitLabel(Label); return; } |