summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2014-01-28 23:12:49 +0000
committerDavid Woodhouse <dwmw2@infradead.org>2014-01-28 23:12:49 +0000
commitd5d381b76253fb6ccda6adc7b9d7239305b3d881 (patch)
tree80ff71cb717123dcbe9395a8ca0dd4421a578494
parent4396f5d9d2c215988f9368e94bfd5e1eb1cced58 (diff)
downloadllvm-d5d381b76253fb6ccda6adc7b9d7239305b3d881.tar.gz
llvm-d5d381b76253fb6ccda6adc7b9d7239305b3d881.tar.bz2
llvm-d5d381b76253fb6ccda6adc7b9d7239305b3d881.tar.xz
Modify MCObjectStreamer EmitInstTo* interface
Add MCSubtargetInfo parameter virtual void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &); virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &); git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200346 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/MC/MCELFStreamer.h4
-rw-r--r--include/llvm/MC/MCObjectStreamer.h5
-rw-r--r--lib/MC/MCELFStreamer.cpp8
-rw-r--r--lib/MC/MCMachOStreamer.cpp5
-rw-r--r--lib/MC/MCObjectStreamer.cpp9
-rw-r--r--lib/MC/MCPureStreamer.cpp11
-rw-r--r--lib/MC/WinCOFFStreamer.cpp2
7 files changed, 26 insertions, 18 deletions
diff --git a/include/llvm/MC/MCELFStreamer.h b/include/llvm/MC/MCELFStreamer.h
index 2ad993c9e1..f5704f0b86 100644
--- a/include/llvm/MC/MCELFStreamer.h
+++ b/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/include/llvm/MC/MCObjectStreamer.h b/include/llvm/MC/MCObjectStreamer.h
index 6ad7fa1923..18841979ab 100644
--- a/include/llvm/MC/MCObjectStreamer.h
+++ b/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/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp
index 1f87f3dc5d..580e3a8656 100644
--- a/lib/MC/MCELFStreamer.cpp
+++ b/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<MCRelaxableFragment>(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<MCFixup, 4> Fixups;
SmallString<256> Code;
diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp
index 41b87452e3..f2fa37c056 100644
--- a/lib/MC/MCMachOStreamer.cpp
+++ b/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<MCFixup, 4> Fixups;
diff --git a/lib/MC/MCObjectStreamer.cpp b/lib/MC/MCObjectStreamer.cpp
index 5aa1486b84..d46f9d6f90 100644
--- a/lib/MC/MCObjectStreamer.cpp
+++ b/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/lib/MC/MCPureStreamer.cpp b/lib/MC/MCPureStreamer.cpp
index 1fd83379bb..6d93596676 100644
--- a/lib/MC/MCPureStreamer.cpp
+++ b/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<MCFixup, 4> Fixups;
diff --git a/lib/MC/WinCOFFStreamer.cpp b/lib/MC/WinCOFFStreamer.cpp
index e3dd03ced5..64041f1182 100644
--- a/lib/MC/WinCOFFStreamer.cpp
+++ b/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<MCFixup, 4> Fixups;