[llvm] r215099 - [mips] Add assembler support for .set msa/nomsa directive.
Daniel Sanders
daniel.sanders at imgtec.com
Thu Aug 7 05:03:37 PDT 2014
Author: dsanders
Date: Thu Aug 7 07:03:36 2014
New Revision: 215099
URL: http://llvm.org/viewvc/llvm-project?rev=215099&view=rev
Log:
[mips] Add assembler support for .set msa/nomsa directive.
Summary:
These directives are used to toggle whether the assembler accepts MSA-specific instructions or not.
Patch by Matheus Almeida and Toma Tabacu.
Reviewers: dsanders
Reviewed By: dsanders
Differential Revision: http://reviews.llvm.org/D4783
Added:
llvm/trunk/test/MC/Mips/msa/set-msa-directive-bad.s
llvm/trunk/test/MC/Mips/msa/set-msa-directive.s
Modified:
llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h
Modified: llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp?rev=215099&r1=215098&r2=215099&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Thu Aug 7 07:03:36 2014
@@ -167,6 +167,8 @@ class MipsAsmParser : public MCTargetAsm
bool parseSetNoAtDirective();
bool parseSetMacroDirective();
bool parseSetNoMacroDirective();
+ bool parseSetMsaDirective();
+ bool parseSetNoMsaDirective();
bool parseSetReorderDirective();
bool parseSetNoReorderDirective();
bool parseSetNoMips16Directive();
@@ -2487,6 +2489,30 @@ bool MipsAsmParser::parseSetNoMacroDirec
return false;
}
+bool MipsAsmParser::parseSetMsaDirective() {
+ Parser.Lex();
+
+ // If this is not the end of the statement, report an error.
+ if (getLexer().isNot(AsmToken::EndOfStatement))
+ return reportParseError("unexpected token in statement");
+
+ setFeatureBits(Mips::FeatureMSA, "msa");
+ getTargetStreamer().emitDirectiveSetMsa();
+ return false;
+}
+
+bool MipsAsmParser::parseSetNoMsaDirective() {
+ Parser.Lex();
+
+ // If this is not the end of the statement, report an error.
+ if (getLexer().isNot(AsmToken::EndOfStatement))
+ return reportParseError("unexpected token in statement");
+
+ clearFeatureBits(Mips::FeatureMSA, "msa");
+ getTargetStreamer().emitDirectiveSetNoMsa();
+ return false;
+}
+
bool MipsAsmParser::parseSetNoMips16Directive() {
Parser.Lex();
// If this is not the end of the statement, report an error.
@@ -2782,6 +2808,10 @@ bool MipsAsmParser::parseDirectiveSet()
return parseSetFeature(Mips::FeatureMips64r6);
} else if (Tok.getString() == "dsp") {
return parseSetFeature(Mips::FeatureDSP);
+ } else if (Tok.getString() == "msa") {
+ return parseSetMsaDirective();
+ } else if (Tok.getString() == "nomsa") {
+ return parseSetNoMsaDirective();
} else {
// It is just an identifier, look for an assignment.
parseSetAssignment();
Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp?rev=215099&r1=215098&r2=215099&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp Thu Aug 7 07:03:36 2014
@@ -38,6 +38,8 @@ void MipsTargetStreamer::emitDirectiveSe
void MipsTargetStreamer::emitDirectiveSetNoReorder() {}
void MipsTargetStreamer::emitDirectiveSetMacro() {}
void MipsTargetStreamer::emitDirectiveSetNoMacro() {}
+void MipsTargetStreamer::emitDirectiveSetMsa() { setCanHaveModuleDir(false); }
+void MipsTargetStreamer::emitDirectiveSetNoMsa() { setCanHaveModuleDir(false); }
void MipsTargetStreamer::emitDirectiveSetAt() {}
void MipsTargetStreamer::emitDirectiveSetNoAt() {}
void MipsTargetStreamer::emitDirectiveEnd(StringRef Name) {}
@@ -118,6 +120,16 @@ void MipsTargetAsmStreamer::emitDirectiv
setCanHaveModuleDir(false);
}
+void MipsTargetAsmStreamer::emitDirectiveSetMsa() {
+ OS << "\t.set\tmsa\n";
+ MipsTargetStreamer::emitDirectiveSetMsa();
+}
+
+void MipsTargetAsmStreamer::emitDirectiveSetNoMsa() {
+ OS << "\t.set\tnomsa\n";
+ MipsTargetStreamer::emitDirectiveSetNoMsa();
+}
+
void MipsTargetAsmStreamer::emitDirectiveSetAt() {
OS << "\t.set\tat\n";
setCanHaveModuleDir(false);
Modified: llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h?rev=215099&r1=215098&r2=215099&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h (original)
+++ llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h Thu Aug 7 07:03:36 2014
@@ -30,6 +30,8 @@ public:
virtual void emitDirectiveSetNoReorder();
virtual void emitDirectiveSetMacro();
virtual void emitDirectiveSetNoMacro();
+ virtual void emitDirectiveSetMsa();
+ virtual void emitDirectiveSetNoMsa();
virtual void emitDirectiveSetAt();
virtual void emitDirectiveSetNoAt();
virtual void emitDirectiveEnd(StringRef Name);
@@ -114,6 +116,8 @@ public:
void emitDirectiveSetNoReorder() override;
void emitDirectiveSetMacro() override;
void emitDirectiveSetNoMacro() override;
+ void emitDirectiveSetMsa() override;
+ void emitDirectiveSetNoMsa() override;
void emitDirectiveSetAt() override;
void emitDirectiveSetNoAt() override;
void emitDirectiveEnd(StringRef Name) override;
Added: llvm/trunk/test/MC/Mips/msa/set-msa-directive-bad.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/msa/set-msa-directive-bad.s?rev=215099&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/msa/set-msa-directive-bad.s (added)
+++ llvm/trunk/test/MC/Mips/msa/set-msa-directive-bad.s Thu Aug 7 07:03:36 2014
@@ -0,0 +1,11 @@
+# RUN: not llvm-mc %s -arch=mips -mcpu=mips32r2 2>%t1
+# RUN: FileCheck %s < %t1
+
+ .set nomsa
+ addvi.b $w14, $w12, 14 # CHECK: error: instruction requires a CPU feature not currently enabled
+
+ .set msa
+ addvi.h $w26, $w17, 4
+
+ .set nomsa
+ addvi.w $w19, $w13, 11 # CHECK: error: instruction requires a CPU feature not currently enabled
Added: llvm/trunk/test/MC/Mips/msa/set-msa-directive.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/msa/set-msa-directive.s?rev=215099&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/msa/set-msa-directive.s (added)
+++ llvm/trunk/test/MC/Mips/msa/set-msa-directive.s Thu Aug 7 07:03:36 2014
@@ -0,0 +1,22 @@
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32r2 | FileCheck %s
+
+# CHECK: .set msa
+# CHECK: addvi.b $w14, $w12, 14
+# CHECK: addvi.h $w26, $w17, 4
+# CHECK: addvi.w $w19, $w13, 11
+# CHECK: addvi.d $w16, $w19, 7
+# CHECK: subvi.b $w14, $w12, 14
+# CHECK: subvi.h $w26, $w17, 4
+# CHECK: subvi.w $w19, $w13, 11
+# CHECK: subvi.d $w16, $w19, 7
+
+ .set msa
+ addvi.b $w14, $w12, 14
+ addvi.h $w26, $w17, 4
+ addvi.w $w19, $w13, 11
+ addvi.d $w16, $w19, 7
+
+ subvi.b $w14, $w12, 14
+ subvi.h $w26, $w17, 4
+ subvi.w $w19, $w13, 11
+ subvi.d $w16, $w19, 7
More information about the llvm-commits
mailing list