diff --git a/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp b/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp index 48af1a71ca3..738fa2b204d 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp @@ -47,6 +47,18 @@ void MipsTargetAsmStreamer::emitDirectiveSetNoMicroMips() { OS << "\t.set\tnomicromips\n"; } +void MipsTargetAsmStreamer::emitDirectiveSetMips16() { + OS << "\t.set\tmips16\n"; +} + +void MipsTargetAsmStreamer::emitDirectiveSetNoMips16() { + OS << "\t.set\tnomips16\n"; +} + +void MipsTargetAsmStreamer::emitDirectiveEnt(const MCSymbol &Symbol) { + OS << "\t.ent\t" << Symbol.getName() << '\n'; +} + void MipsTargetAsmStreamer::emitDirectiveAbiCalls() { OS << "\t.abicalls\n"; } void MipsTargetAsmStreamer::emitDirectiveOptionPic0() { OS << "\t.option\tpic0\n"; @@ -81,6 +93,18 @@ void MipsTargetELFStreamer::emitDirectiveSetNoMicroMips() { MicroMipsEnabled = false; } +void MipsTargetELFStreamer::emitDirectiveSetMips16() { + // FIXME: implement. +} + +void MipsTargetELFStreamer::emitDirectiveSetNoMips16() { + // FIXME: implement. +} + +void MipsTargetELFStreamer::emitDirectiveEnt(const MCSymbol &Symbol) { + // FIXME: implement. +} + void MipsTargetELFStreamer::emitDirectiveAbiCalls() { MCAssembler &MCA = getStreamer().getAssembler(); unsigned Flags = MCA.getELFHeaderEFlags(); diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index 2bd6df7fd3f..2f49e74ab82 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -265,19 +265,19 @@ const char *MipsAsmPrinter::getCurrentABIString() const { } void MipsAsmPrinter::EmitFunctionEntryLabel() { + MipsTargetStreamer &TS = getTargetStreamer(); if (Subtarget->inMicroMipsMode()) - getTargetStreamer().emitDirectiveSetMicroMips(); + TS.emitDirectiveSetMicroMips(); + // leave out until FSF available gas has micromips changes + // else + // TS.emitDirectiveSetNoMicroMips(); - if (OutStreamer.hasRawTextSupport()) { - if (Subtarget->inMips16Mode()) - OutStreamer.EmitRawText(StringRef("\t.set\tmips16")); - else - OutStreamer.EmitRawText(StringRef("\t.set\tnomips16")); - // leave out until FSF available gas has micromips changes - // OutStreamer.EmitRawText(StringRef("\t.set\tnomicromips")); - OutStreamer.EmitRawText("\t.ent\t" + Twine(CurrentFnSym->getName())); - } + if (Subtarget->inMips16Mode()) + TS.emitDirectiveSetMips16(); + else + TS.emitDirectiveSetNoMips16(); + TS.emitDirectiveEnt(*CurrentFnSym); OutStreamer.EmitLabel(CurrentFnSym); } diff --git a/lib/Target/Mips/MipsTargetStreamer.h b/lib/Target/Mips/MipsTargetStreamer.h index 4d1dd0090da..4c0446fc3ce 100644 --- a/lib/Target/Mips/MipsTargetStreamer.h +++ b/lib/Target/Mips/MipsTargetStreamer.h @@ -21,6 +21,9 @@ public: virtual void emitMipsHackELFFlags(unsigned Flags) = 0; virtual void emitDirectiveSetMicroMips() = 0; virtual void emitDirectiveSetNoMicroMips() = 0; + virtual void emitDirectiveSetMips16() = 0; + virtual void emitDirectiveSetNoMips16() = 0; + virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0; virtual void emitDirectiveAbiCalls() = 0; virtual void emitDirectiveOptionPic0() = 0; }; @@ -34,6 +37,9 @@ public: virtual void emitMipsHackELFFlags(unsigned Flags); virtual void emitDirectiveSetMicroMips(); virtual void emitDirectiveSetNoMicroMips(); + virtual void emitDirectiveSetMips16(); + virtual void emitDirectiveSetNoMips16(); + virtual void emitDirectiveEnt(const MCSymbol &Symbol); virtual void emitDirectiveAbiCalls(); virtual void emitDirectiveOptionPic0(); }; @@ -52,6 +58,9 @@ public: virtual void emitMipsHackELFFlags(unsigned Flags); virtual void emitDirectiveSetMicroMips(); virtual void emitDirectiveSetNoMicroMips(); + virtual void emitDirectiveSetMips16(); + virtual void emitDirectiveSetNoMips16(); + virtual void emitDirectiveEnt(const MCSymbol &Symbol); virtual void emitDirectiveAbiCalls(); virtual void emitDirectiveOptionPic0(); }; diff --git a/test/CodeGen/Mips/fpneeded.ll b/test/CodeGen/Mips/fpneeded.ll index dcdebb92e40..fdd8e8f707e 100644 --- a/test/CodeGen/Mips/fpneeded.ll +++ b/test/CodeGen/Mips/fpneeded.ll @@ -10,7 +10,7 @@ entry: ret float 1.000000e+00 } -; 32: .set nomips16 # @fv +; 32: .set nomips16 ; 32: .ent fv ; 32: .set noreorder ; 32: .set nomacro @@ -26,7 +26,7 @@ entry: ret double 2.000000e+00 } -; 32: .set nomips16 # @dv +; 32: .set nomips16 ; 32: .ent dv ; 32: .set noreorder ; 32: .set nomacro @@ -44,7 +44,7 @@ entry: ret void } -; 32: .set nomips16 # @vf +; 32: .set nomips16 ; 32: .ent vf ; 32: .set noreorder ; 32: .set nomacro @@ -62,7 +62,7 @@ entry: ret void } -; 32: .set nomips16 # @vd +; 32: .set nomips16 ; 32: .ent vd ; 32: .set noreorder ; 32: .set nomacro @@ -83,7 +83,7 @@ entry: ret void } -; 32: .set nomips16 # @foo1 +; 32: .set nomips16 ; 32: .ent foo1 ; 32: .set noreorder ; 32: .set nomacro @@ -102,7 +102,7 @@ entry: } -; 32: .set nomips16 # @foo2 +; 32: .set nomips16 ; 32: .ent foo2 ; 32: .set noreorder ; 32: .set nomacro @@ -120,7 +120,7 @@ entry: ret void } -; 32: .set nomips16 # @foo3 +; 32: .set nomips16 ; 32: .ent foo3 ; 32: .set noreorder ; 32: .set nomacro @@ -138,7 +138,7 @@ entry: ret void } -; 32: .set mips16 # @vv +; 32: .set mips16 ; 32: .ent vv ; 32: save {{.+}} diff --git a/test/CodeGen/Mips/fpnotneeded.ll b/test/CodeGen/Mips/fpnotneeded.ll index 6a4363c5813..e12d7baacdb 100644 --- a/test/CodeGen/Mips/fpnotneeded.ll +++ b/test/CodeGen/Mips/fpnotneeded.ll @@ -10,7 +10,7 @@ entry: ret void } -; 32: .set mips16 # @vv +; 32: .set mips16 ; 32: .ent vv ; 32: save {{.+}} @@ -23,7 +23,7 @@ entry: ret i32 %0 } -; 32: .set mips16 # @iv +; 32: .set mips16 ; 32: .ent iv ; 32: save {{.+}} @@ -39,7 +39,7 @@ entry: ret void } -; 32: .set mips16 # @vif +; 32: .set mips16 ; 32: .ent vif ; 32: save {{.+}} @@ -52,7 +52,7 @@ entry: ret void } -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: save {{.+}} @@ -69,7 +69,7 @@ entry: ret float 1.000000e+00 } -; 32: .set nomips16 # @fv +; 32: .set nomips16 ; 32: .ent fv ; 32: .set noreorder ; 32: .set nomacro diff --git a/test/CodeGen/Mips/helloworld.ll b/test/CodeGen/Mips/helloworld.ll index 709c12e1c67..36f4ad6b55c 100644 --- a/test/CodeGen/Mips/helloworld.ll +++ b/test/CodeGen/Mips/helloworld.ll @@ -15,7 +15,7 @@ entry: %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0)) ret i32 0 -; SR: .set mips16 # @main +; SR: .set mips16 ; SR32: .set nomips16 ; SR32: .ent main diff --git a/test/CodeGen/Mips/mips16_32_1.ll b/test/CodeGen/Mips/mips16_32_1.ll index a72cfc84875..f6096b402f2 100644 --- a/test/CodeGen/Mips/mips16_32_1.ll +++ b/test/CodeGen/Mips/mips16_32_1.ll @@ -6,7 +6,7 @@ entry: ret void } -; CHECK: .set mips16 # @foo +; CHECK: .set mips16 ; CHECK: .ent foo ; CHECK: jrc $ra ; CHECK: .end foo diff --git a/test/CodeGen/Mips/mips16_32_10.ll b/test/CodeGen/Mips/mips16_32_10.ll index 686faa718e0..ff9831ed762 100644 --- a/test/CodeGen/Mips/mips16_32_10.ll +++ b/test/CodeGen/Mips/mips16_32_10.ll @@ -4,7 +4,7 @@ define void @foo() #0 { entry: ret void } -; 16: .set nomips16 # @foo +; 16: .set nomips16 ; 16: .ent foo ; 16: .set noreorder ; 16: .set nomacro @@ -21,7 +21,7 @@ entry: ret void } -; 16: .set mips16 # @nofoo +; 16: .set mips16 ; 16: .ent nofoo ; 16: jrc $ra @@ -32,7 +32,7 @@ entry: ret i32 0 } -; 16: .set nomips16 # @main +; 16: .set nomips16 ; 16: .ent main ; 16: .set noreorder ; 16: .set nomacro diff --git a/test/CodeGen/Mips/mips16_32_3.ll b/test/CodeGen/Mips/mips16_32_3.ll index 4ad427f0df7..c5a29a0b8fd 100644 --- a/test/CodeGen/Mips/mips16_32_3.ll +++ b/test/CodeGen/Mips/mips16_32_3.ll @@ -6,11 +6,11 @@ entry: ret void } -; 16: .set mips16 # @foo +; 16: .set mips16 ; 16: .ent foo ; 16: jrc $ra ; 16: .end foo -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: jrc $ra ; 32: .end foo @@ -19,7 +19,7 @@ entry: ret void } -; 16: .set nomips16 # @nofoo +; 16: .set nomips16 ; 16: .ent nofoo ; 16: .set noreorder ; 16: .set nomacro @@ -30,7 +30,7 @@ entry: ; 16: .set macro ; 16: .set reorder ; 16: .end nofoo -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -46,11 +46,11 @@ entry: ret i32 0 } -; 16: .set mips16 # @main +; 16: .set mips16 ; 16: .ent main ; 16: jrc $ra ; 16: .end main -; 32: .set nomips16 # @main +; 32: .set nomips16 ; 32: .ent main ; 32: .set noreorder ; 32: .set nomacro diff --git a/test/CodeGen/Mips/mips16_32_4.ll b/test/CodeGen/Mips/mips16_32_4.ll index e8100e8237a..1238363d907 100644 --- a/test/CodeGen/Mips/mips16_32_4.ll +++ b/test/CodeGen/Mips/mips16_32_4.ll @@ -6,11 +6,11 @@ entry: ret void } -; 16: .set mips16 # @foo +; 16: .set mips16 ; 16: .ent foo ; 16: jrc $ra ; 16: .end foo -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: jrc $ra ; 32: .end foo @@ -19,7 +19,7 @@ entry: ret void } -; 16: .set nomips16 # @nofoo +; 16: .set nomips16 ; 16: .ent nofoo ; 16: .set noreorder ; 16: .set nomacro @@ -30,7 +30,7 @@ entry: ; 16: .set macro ; 16: .set reorder ; 16: .end nofoo -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -46,11 +46,11 @@ entry: ret i32 0 } -; 16: .set mips16 # @main +; 16: .set mips16 ; 16: .ent main ; 16: jrc $ra ; 16: .end main -; 32: .set mips16 # @main +; 32: .set mips16 ; 32: .ent main ; 32: jrc $ra ; 32: .end main diff --git a/test/CodeGen/Mips/mips16_32_5.ll b/test/CodeGen/Mips/mips16_32_5.ll index 5bdeede5c66..5d4c8a1af56 100644 --- a/test/CodeGen/Mips/mips16_32_5.ll +++ b/test/CodeGen/Mips/mips16_32_5.ll @@ -6,11 +6,11 @@ entry: ret void } -; 16: .set mips16 # @foo +; 16: .set mips16 ; 16: .ent foo ; 16: jrc $ra ; 16: .end foo -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: jrc $ra ; 32: .end foo @@ -19,7 +19,7 @@ entry: ret void } -; 16: .set nomips16 # @nofoo +; 16: .set nomips16 ; 16: .ent nofoo ; 16: .set noreorder ; 16: .set nomacro @@ -30,7 +30,7 @@ entry: ; 16: .set macro ; 16: .set reorder ; 16: .end nofoo -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -46,7 +46,7 @@ entry: ret i32 0 } -; 16: .set nomips16 # @main +; 16: .set nomips16 ; 16: .ent main ; 16: .set noreorder ; 16: .set nomacro @@ -58,7 +58,7 @@ entry: ; 16: .set reorder ; 16: .end main -; 32: .set nomips16 # @main +; 32: .set nomips16 ; 32: .ent main ; 32: .set noreorder ; 32: .set nomacro diff --git a/test/CodeGen/Mips/mips16_32_6.ll b/test/CodeGen/Mips/mips16_32_6.ll index 45f71f01ec6..63323b608bc 100644 --- a/test/CodeGen/Mips/mips16_32_6.ll +++ b/test/CodeGen/Mips/mips16_32_6.ll @@ -6,11 +6,11 @@ entry: ret void } -; 16: .set mips16 # @foo +; 16: .set mips16 ; 16: .ent foo ; 16: jrc $ra ; 16: .end foo -; 32: .set nomips16 # @foo +; 32: .set nomips16 ; 32: .ent foo ; 32: .set noreorder ; 32: .set nomacro @@ -26,7 +26,7 @@ entry: ret void } -; 16: .set nomips16 # @nofoo +; 16: .set nomips16 ; 16: .ent nofoo ; 16: .set noreorder ; 16: .set nomacro @@ -37,7 +37,7 @@ entry: ; 16: .set macro ; 16: .set reorder ; 16: .end nofoo -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -53,7 +53,7 @@ entry: ret i32 0 } -; 16: .set nomips16 # @main +; 16: .set nomips16 ; 16: .ent main ; 16: .set noreorder ; 16: .set nomacro @@ -65,7 +65,7 @@ entry: ; 16: .set reorder ; 16: .end main -; 32: .set nomips16 # @main +; 32: .set nomips16 ; 32: .ent main ; 32: .set noreorder ; 32: .set nomacro diff --git a/test/CodeGen/Mips/mips16_32_7.ll b/test/CodeGen/Mips/mips16_32_7.ll index e171b367c47..480a23c8b25 100644 --- a/test/CodeGen/Mips/mips16_32_7.ll +++ b/test/CodeGen/Mips/mips16_32_7.ll @@ -6,11 +6,11 @@ entry: ret void } -; 16: .set mips16 # @foo +; 16: .set mips16 ; 16: .ent foo ; 16: jrc $ra ; 16: .end foo -; 32: .set nomips16 # @foo +; 32: .set nomips16 ; 32: .ent foo ; 32: .set noreorder ; 32: .set nomacro @@ -26,7 +26,7 @@ entry: ret void } -; 16: .set nomips16 # @nofoo +; 16: .set nomips16 ; 16: .ent nofoo ; 16: .set noreorder ; 16: .set nomacro @@ -37,7 +37,7 @@ entry: ; 16: .set macro ; 16: .set reorder ; 16: .end nofoo -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -53,12 +53,12 @@ entry: ret i32 0 } -; 16: .set mips16 # @main +; 16: .set mips16 ; 16: .ent main ; 16: jrc $ra ; 16: .end main -; 32: .set mips16 # @main +; 32: .set mips16 ; 32: .ent main ; 32: jrc $ra ; 32: .end main diff --git a/test/CodeGen/Mips/mips16_32_8.ll b/test/CodeGen/Mips/mips16_32_8.ll index 3c8cc5a4e28..2f5bc219cf3 100644 --- a/test/CodeGen/Mips/mips16_32_8.ll +++ b/test/CodeGen/Mips/mips16_32_8.ll @@ -14,7 +14,7 @@ entry: ret void } -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: jrc $ra ; 32: .end foo @@ -32,7 +32,7 @@ entry: ret void } -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -56,7 +56,7 @@ entry: ret i32 0 } -; 32: .set nomips16 # @main +; 32: .set nomips16 ; 32: .ent main ; 32: .set noreorder ; 32: .set nomacro diff --git a/test/CodeGen/Mips/mips16_32_9.ll b/test/CodeGen/Mips/mips16_32_9.ll index 585a4e8408b..8543147bed0 100644 --- a/test/CodeGen/Mips/mips16_32_9.ll +++ b/test/CodeGen/Mips/mips16_32_9.ll @@ -5,7 +5,7 @@ entry: ret void } -; 32: .set mips16 # @foo +; 32: .set mips16 ; 32: .ent foo ; 32: jrc $ra ; 32: .end foo @@ -14,7 +14,7 @@ entry: ret void } -; 32: .set nomips16 # @nofoo +; 32: .set nomips16 ; 32: .ent nofoo ; 32: .set noreorder ; 32: .set nomacro @@ -30,7 +30,7 @@ entry: ret i32 0 } -; 32: .set mips16 # @main +; 32: .set mips16 ; 32: .ent main ; 32: jrc $ra ; 32: .end main diff --git a/test/CodeGen/Mips/null.ll b/test/CodeGen/Mips/null.ll index 00c66a9928f..bc78a27f199 100644 --- a/test/CodeGen/Mips/null.ll +++ b/test/CodeGen/Mips/null.ll @@ -5,7 +5,7 @@ define i32 @main() nounwind { entry: ret i32 0 -; 16: .set mips16 # @main +; 16: .set mips16 ; 16: jrc $ra