From: Toma Tabacu Date: Tue, 9 Jun 2015 13:33:26 +0000 (+0000) Subject: Recommit "[mips] [IAS] Restore STI.FeatureBits in .set pop." (r239144). X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c1548878562fb029f69bb673e8f56577d9ff6043;p=oota-llvm.git Recommit "[mips] [IAS] Restore STI.FeatureBits in .set pop." (r239144). Specified the llvm namespace for the 2 calls to make_unique() which caused compilation errors in Visual Studio 2013. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239405 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCSubtargetInfo.h b/include/llvm/MC/MCSubtargetInfo.h index 9f76cb75062..ee5d56334a2 100644 --- a/include/llvm/MC/MCSubtargetInfo.h +++ b/include/llvm/MC/MCSubtargetInfo.h @@ -73,7 +73,9 @@ public: /// setFeatureBits - Set the feature bits. /// - void setFeatureBits(FeatureBitset& FeatureBits_) { FeatureBits = FeatureBits_; } + void setFeatureBits(const FeatureBitset &FeatureBits_) { + FeatureBits = FeatureBits_; + } /// InitMCProcessorInfo - Set or change the CPU (optionally supplemented with /// feature string). Recompute feature bits and scheduling model. diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 0d08138f8a9..9c054e5ac23 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -43,7 +43,7 @@ class MCInstrInfo; namespace { class MipsAssemblerOptions { public: - MipsAssemblerOptions(uint64_t Features_) : + MipsAssemblerOptions(const FeatureBitset &Features_) : ATReg(1), Reorder(true), Macro(true), Features(Features_) {} MipsAssemblerOptions(const MipsAssemblerOptions *Opts) { @@ -70,8 +70,8 @@ public: void setMacro() { Macro = true; } void setNoMacro() { Macro = false; } - uint64_t getFeatures() const { return Features; } - void setFeatures(uint64_t Features_) { Features = Features_; } + const FeatureBitset &getFeatures() const { return Features; } + void setFeatures(const FeatureBitset &Features_) { Features = Features_; } // Set of features that are either architecture features or referenced // by them (e.g.: FeatureNaN2008 implied by FeatureMips32r6). @@ -84,7 +84,7 @@ private: unsigned ATReg; bool Reorder; bool Macro; - uint64_t Features; + FeatureBitset Features; }; } @@ -327,23 +327,23 @@ class MipsAsmParser : public MCTargetAsmParser { STI.setFeatureBits(FeatureBits); setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(ArchFeature))); - AssemblerOptions.back()->setFeatures(getAvailableFeatures()); + AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); } void setFeatureBits(uint64_t Feature, StringRef FeatureString) { if (!(STI.getFeatureBits()[Feature])) { setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); + AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); } - AssemblerOptions.back()->setFeatures(getAvailableFeatures()); } void clearFeatureBits(uint64_t Feature, StringRef FeatureString) { if (STI.getFeatureBits()[Feature]) { setAvailableFeatures( ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); + AssemblerOptions.back()->setFeatures(STI.getFeatureBits()); } - AssemblerOptions.back()->setFeatures(getAvailableFeatures()); } public: @@ -369,11 +369,11 @@ public: // Remember the initial assembler options. The user can not modify these. AssemblerOptions.push_back( - make_unique(getAvailableFeatures())); + llvm::make_unique(STI.getFeatureBits())); // Create an assembler options environment for the user to modify. AssemblerOptions.push_back( - make_unique(getAvailableFeatures())); + llvm::make_unique(STI.getFeatureBits())); getTargetStreamer().updateABIInfo(*this); @@ -3603,7 +3603,9 @@ bool MipsAsmParser::parseSetPopDirective() { return reportParseError(Loc, ".set pop with no .set push"); AssemblerOptions.pop_back(); - setAvailableFeatures(AssemblerOptions.back()->getFeatures()); + setAvailableFeatures( + ComputeAvailableFeatures(AssemblerOptions.back()->getFeatures())); + STI.setFeatureBits(AssemblerOptions.back()->getFeatures()); getTargetStreamer().emitDirectiveSetPop(); return false; @@ -3673,7 +3675,9 @@ bool MipsAsmParser::parseSetMips0Directive() { return reportParseError("unexpected token, expected end of statement"); // Reset assembler options to their initial values. - setAvailableFeatures(AssemblerOptions.front()->getFeatures()); + setAvailableFeatures( + ComputeAvailableFeatures(AssemblerOptions.front()->getFeatures())); + STI.setFeatureBits(AssemblerOptions.front()->getFeatures()); AssemblerOptions.back()->setFeatures(AssemblerOptions.front()->getFeatures()); getTargetStreamer().emitDirectiveSetMips0(); diff --git a/test/MC/Mips/set-push-pop-directives-bad.s b/test/MC/Mips/set-push-pop-directives-bad.s index 53d8b230815..8994eea1c8b 100644 --- a/test/MC/Mips/set-push-pop-directives-bad.s +++ b/test/MC/Mips/set-push-pop-directives-bad.s @@ -12,3 +12,12 @@ # CHECK: :[[@LINE-1]]:19: error: unexpected token, expected end of statement .set pop bar # CHECK: :[[@LINE-1]]:18: error: unexpected token, expected end of statement + + .set hardfloat + .set push + .set softfloat + add.s $f2, $f2, $f2 +# CHECK: :[[@LINE-1]]:9: error: instruction requires a CPU feature not currently enabled + .set pop + add.s $f2, $f2, $f2 +# CHECK-NOT: :[[@LINE-1]]:9: error: instruction requires a CPU feature not currently enabled diff --git a/test/MC/Mips/set-push-pop-directives.s b/test/MC/Mips/set-push-pop-directives.s index 5f55b7c7e4d..3a0b2aecc58 100644 --- a/test/MC/Mips/set-push-pop-directives.s +++ b/test/MC/Mips/set-push-pop-directives.s @@ -51,3 +51,20 @@ # CHECK: b 1336 # CHECK: nop # CHECK: addvi.b $w15, $w13, 18 + + .set push + .set dsp + lbux $7, $10($11) + .set pop + + .set push + .set dsp + lbux $7, $10($11) +# CHECK-NOT: :[[@LINE-1]]:5: error: instruction requires a CPU feature not currently enabled + .set pop + + .set push + .set dsp + lbux $7, $10($11) +# CHECK-NOT: :[[@LINE-1]]:5: error: instruction requires a CPU feature not currently enabled + .set pop