diff --git a/llvm/include/llvm/MC/MCELFStreamer.h b/llvm/include/llvm/MC/MCELFStreamer.h index 2ad993c9e14c7c9a81c9bb040a85ed3e7f800c2e..f5704f0b868c139f1aceb8ec73a5309eb384dc8d 100644 --- a/llvm/include/llvm/MC/MCELFStreamer.h +++ b/llvm/include/llvm/MC/MCELFStreamer.h @@ -85,8 +85,8 @@ public: virtual void FinishImpl(); private: - virtual void EmitInstToFragment(const MCInst &Inst); - virtual void EmitInstToData(const MCInst &Inst); + virtual void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &); + virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &); virtual void EmitBundleAlignMode(unsigned AlignPow2); virtual void EmitBundleLock(bool AlignToEnd); diff --git a/llvm/include/llvm/MC/MCObjectStreamer.h b/llvm/include/llvm/MC/MCObjectStreamer.h index 6ad7fa192378b26364946f311711727e91a0b675..18841979aba8d71ab9b3d2aa98685fd8555ef8cb 100644 --- a/llvm/include/llvm/MC/MCObjectStreamer.h +++ b/llvm/include/llvm/MC/MCObjectStreamer.h @@ -17,6 +17,7 @@ namespace llvm { class MCAssembler; class MCCodeEmitter; class MCSectionData; +class MCSubtargetInfo; class MCExpr; class MCFragment; class MCDataFragment; @@ -35,7 +36,7 @@ class MCObjectStreamer : public MCStreamer { MCSectionData *CurSectionData; MCSectionData::iterator CurInsertionPoint; - virtual void EmitInstToData(const MCInst &Inst) = 0; + virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo&) = 0; virtual void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame); virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame); @@ -87,7 +88,7 @@ public: /// \brief Emit an instruction to a special fragment, because this instruction /// can change its size during relaxation. - virtual void EmitInstToFragment(const MCInst &Inst); + virtual void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &); virtual void EmitBundleAlignMode(unsigned AlignPow2); virtual void EmitBundleLock(bool AlignToEnd); diff --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp index 1f87f3dc5d8a4217f0e8e4e4bb9c56455f327a2e..580e3a86560dc6055103ea394e3f88525e1e3b18 100644 --- a/llvm/lib/MC/MCELFStreamer.cpp +++ b/llvm/lib/MC/MCELFStreamer.cpp @@ -397,15 +397,17 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) { } } -void MCELFStreamer::EmitInstToFragment(const MCInst &Inst) { - this->MCObjectStreamer::EmitInstToFragment(Inst); +void MCELFStreamer::EmitInstToFragment(const MCInst &Inst, + const MCSubtargetInfo &STI) { + this->MCObjectStreamer::EmitInstToFragment(Inst, STI); MCRelaxableFragment &F = *cast(getCurrentFragment()); for (unsigned i = 0, e = F.getFixups().size(); i != e; ++i) fixSymbolsInTLSFixups(F.getFixups()[i].getValue()); } -void MCELFStreamer::EmitInstToData(const MCInst &Inst) { +void MCELFStreamer::EmitInstToData(const MCInst &Inst, + const MCSubtargetInfo &STI) { MCAssembler &Assembler = getAssembler(); SmallVector Fixups; SmallString<256> Code; diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp index 41b87452e345c8b223f625ef4dc10bf97d6e6bf2..f2fa37c0568079c1199929acb31b104d2f630143 100644 --- a/llvm/lib/MC/MCMachOStreamer.cpp +++ b/llvm/lib/MC/MCMachOStreamer.cpp @@ -31,7 +31,7 @@ namespace { class MCMachOStreamer : public MCObjectStreamer { private: - virtual void EmitInstToData(const MCInst &Inst); + virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI); void EmitDataRegion(DataRegionData::KindTy Kind); void EmitDataRegionEnd(); @@ -364,7 +364,8 @@ void MCMachOStreamer::EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol, return; } -void MCMachOStreamer::EmitInstToData(const MCInst &Inst) { +void MCMachOStreamer::EmitInstToData(const MCInst &Inst, + const MCSubtargetInfo &STI) { MCDataFragment *DF = getOrCreateDataFragment(); SmallVector Fixups; diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index 5aa1486b8472d4e1d40d3e7bf1529d2a01ff6f61..d46f9d6f903201cfaac2e70abf16fa1252f7b82d 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -203,7 +203,7 @@ void MCObjectStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo // If this instruction doesn't need relaxation, just emit it as data. MCAssembler &Assembler = getAssembler(); if (!Assembler.getBackend().mayNeedRelaxation(Inst)) { - EmitInstToData(Inst); + EmitInstToData(Inst, STI); return; } @@ -218,15 +218,16 @@ void MCObjectStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo getAssembler().getBackend().relaxInstruction(Inst, Relaxed); while (getAssembler().getBackend().mayNeedRelaxation(Relaxed)) getAssembler().getBackend().relaxInstruction(Relaxed, Relaxed); - EmitInstToData(Relaxed); + EmitInstToData(Relaxed, STI); return; } // Otherwise emit to a separate fragment. - EmitInstToFragment(Inst); + EmitInstToFragment(Inst, STI); } -void MCObjectStreamer::EmitInstToFragment(const MCInst &Inst) { +void MCObjectStreamer::EmitInstToFragment(const MCInst &Inst, + const MCSubtargetInfo &STI) { // Always create a new, separate fragment here, because its size can change // during relaxation. MCRelaxableFragment *IF = new MCRelaxableFragment(Inst); diff --git a/llvm/lib/MC/MCPureStreamer.cpp b/llvm/lib/MC/MCPureStreamer.cpp index 1fd83379bbeccc6ea2b47034235ca367221a3f91..6d93596676b9e39f46551b7b1b6abb8aa50a23a9 100644 --- a/llvm/lib/MC/MCPureStreamer.cpp +++ b/llvm/lib/MC/MCPureStreamer.cpp @@ -23,8 +23,9 @@ namespace { class MCPureStreamer : public MCObjectStreamer { private: - virtual void EmitInstToFragment(const MCInst &Inst); - virtual void EmitInstToData(const MCInst &Inst); + virtual void EmitInstToFragment(const MCInst &Inst, + const MCSubtargetInfo &STI); + virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI); public: MCPureStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS, @@ -178,7 +179,8 @@ bool MCPureStreamer::EmitValueToOffset(const MCExpr *Offset, return false; } -void MCPureStreamer::EmitInstToFragment(const MCInst &Inst) { +void MCPureStreamer::EmitInstToFragment(const MCInst &Inst, + const MCSubtargetInfo &STI) { MCRelaxableFragment *IF = new MCRelaxableFragment(Inst); insert(IF); @@ -196,7 +198,8 @@ void MCPureStreamer::EmitInstToFragment(const MCInst &Inst) { IF->getFixups() = Fixups; } -void MCPureStreamer::EmitInstToData(const MCInst &Inst) { +void MCPureStreamer::EmitInstToData(const MCInst &Inst, + const MCSubtargetInfo &STI) { MCDataFragment *DF = getOrCreateDataFragment(); SmallVector Fixups; diff --git a/llvm/lib/MC/WinCOFFStreamer.cpp b/llvm/lib/MC/WinCOFFStreamer.cpp index e3dd03ced55ec803c7b07e4b620812d123d1e2c8..64041f1182234b96feedcb09515967ff61f34b51 100644 --- a/llvm/lib/MC/WinCOFFStreamer.cpp +++ b/llvm/lib/MC/WinCOFFStreamer.cpp @@ -78,7 +78,7 @@ public: virtual void FinishImpl(); private: - virtual void EmitInstToData(const MCInst &Inst) { + virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) { MCDataFragment *DF = getOrCreateDataFragment(); SmallVector Fixups;