diff options
author | Vladimir Medic <Vladimir.Medic@imgtec.com> | 2014-03-05 11:05:09 +0000 |
---|---|---|
committer | Vladimir Medic <Vladimir.Medic@imgtec.com> | 2014-03-05 11:05:09 +0000 |
commit | 27c398e38cbdd6e8efa59df57de217aa313b63fb (patch) | |
tree | b4c4f6f646fea5ab5be6953a5f5200f5cdbcc4a2 /llvm/lib | |
parent | cef10edcb2f712f15accad2e6f7f8d6a956fcc1f (diff) | |
download | bcm5719-llvm-27c398e38cbdd6e8efa59df57de217aa313b63fb.tar.gz bcm5719-llvm-27c398e38cbdd6e8efa59df57de217aa313b63fb.zip |
This patch implements .set dsp directive and sets appropriate feature bits.This directive is a counterpart of -mattr=dsp command line option with the exception that it does not influence elf header flags. The usage example is gives in test file.
llvm-svn: 202966
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/Target/Mips/MipsTargetStreamer.h | 3 |
3 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index c6bee6302d8..d010a97ca50 100644 --- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -2460,6 +2460,13 @@ bool MipsAsmParser::parseDirectiveSet() { setFeatureBits(Mips::FeatureMips32r2,"mips32r2"); getTargetStreamer().emitDirectiveSetMips32R2(); return false; + } else if (Tok.getString() == "dsp") { + Parser.Lex(); // Eat token. + if (getLexer().isNot(AsmToken::EndOfStatement)) + return reportParseError("unexpected token in .set directive"); + setFeatureBits(Mips::FeatureDSP, "dsp"); + getTargetStreamer().emitDirectiveSetDsp(); + return false; } else { // It is just an identifier, look for an assignment. parseSetAssignment(); diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp index ef6d8d40e3a..e9ce4b8bf25 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp @@ -101,6 +101,9 @@ void MipsTargetAsmStreamer::emitDirectiveSetMips32R2() { OS << "\t.set\tmips32r2\n"; } +void MipsTargetAsmStreamer::emitDirectiveSetDsp() { + OS << "\t.set\tdsp\n"; +} // Print a 32 bit hex number with all numbers. static void printHex32(unsigned Value, raw_ostream &OS) { OS << "0x"; @@ -310,3 +313,7 @@ void MipsTargetELFStreamer::emitFMask(unsigned FPUBitmask, void MipsTargetELFStreamer::emitDirectiveSetMips32R2() { // No action required for ELF output. } + +void MipsTargetELFStreamer::emitDirectiveSetDsp() { + // No action required for ELF output. +} diff --git a/llvm/lib/Target/Mips/MipsTargetStreamer.h b/llvm/lib/Target/Mips/MipsTargetStreamer.h index b1132676a98..7917b77ced1 100644 --- a/llvm/lib/Target/Mips/MipsTargetStreamer.h +++ b/llvm/lib/Target/Mips/MipsTargetStreamer.h @@ -41,6 +41,7 @@ public: virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) = 0; virtual void emitDirectiveSetMips32R2() = 0; + virtual void emitDirectiveSetDsp() = 0; }; // This part is for ascii assembly output @@ -71,6 +72,7 @@ public: virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); virtual void emitDirectiveSetMips32R2(); + virtual void emitDirectiveSetDsp(); }; // This part is for ELF object output @@ -108,6 +110,7 @@ public: virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); virtual void emitDirectiveSetMips32R2(); + virtual void emitDirectiveSetDsp(); }; } #endif |