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
This commit is contained in:
Toma Tabacu 2015-06-09 13:33:26 +00:00
parent 22debdcab6
commit c154887856
4 changed files with 44 additions and 12 deletions

View File

@ -73,7 +73,9 @@ public:
/// setFeatureBits - Set the feature bits. /// 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 /// InitMCProcessorInfo - Set or change the CPU (optionally supplemented with
/// feature string). Recompute feature bits and scheduling model. /// feature string). Recompute feature bits and scheduling model.

View File

@ -43,7 +43,7 @@ class MCInstrInfo;
namespace { namespace {
class MipsAssemblerOptions { class MipsAssemblerOptions {
public: public:
MipsAssemblerOptions(uint64_t Features_) : MipsAssemblerOptions(const FeatureBitset &Features_) :
ATReg(1), Reorder(true), Macro(true), Features(Features_) {} ATReg(1), Reorder(true), Macro(true), Features(Features_) {}
MipsAssemblerOptions(const MipsAssemblerOptions *Opts) { MipsAssemblerOptions(const MipsAssemblerOptions *Opts) {
@ -70,8 +70,8 @@ public:
void setMacro() { Macro = true; } void setMacro() { Macro = true; }
void setNoMacro() { Macro = false; } void setNoMacro() { Macro = false; }
uint64_t getFeatures() const { return Features; } const FeatureBitset &getFeatures() const { return Features; }
void setFeatures(uint64_t Features_) { Features = Features_; } void setFeatures(const FeatureBitset &Features_) { Features = Features_; }
// Set of features that are either architecture features or referenced // Set of features that are either architecture features or referenced
// by them (e.g.: FeatureNaN2008 implied by FeatureMips32r6). // by them (e.g.: FeatureNaN2008 implied by FeatureMips32r6).
@ -84,7 +84,7 @@ private:
unsigned ATReg; unsigned ATReg;
bool Reorder; bool Reorder;
bool Macro; bool Macro;
uint64_t Features; FeatureBitset Features;
}; };
} }
@ -327,23 +327,23 @@ class MipsAsmParser : public MCTargetAsmParser {
STI.setFeatureBits(FeatureBits); STI.setFeatureBits(FeatureBits);
setAvailableFeatures( setAvailableFeatures(
ComputeAvailableFeatures(STI.ToggleFeature(ArchFeature))); ComputeAvailableFeatures(STI.ToggleFeature(ArchFeature)));
AssemblerOptions.back()->setFeatures(getAvailableFeatures()); AssemblerOptions.back()->setFeatures(STI.getFeatureBits());
} }
void setFeatureBits(uint64_t Feature, StringRef FeatureString) { void setFeatureBits(uint64_t Feature, StringRef FeatureString) {
if (!(STI.getFeatureBits()[Feature])) { if (!(STI.getFeatureBits()[Feature])) {
setAvailableFeatures( setAvailableFeatures(
ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); ComputeAvailableFeatures(STI.ToggleFeature(FeatureString)));
AssemblerOptions.back()->setFeatures(STI.getFeatureBits());
} }
AssemblerOptions.back()->setFeatures(getAvailableFeatures());
} }
void clearFeatureBits(uint64_t Feature, StringRef FeatureString) { void clearFeatureBits(uint64_t Feature, StringRef FeatureString) {
if (STI.getFeatureBits()[Feature]) { if (STI.getFeatureBits()[Feature]) {
setAvailableFeatures( setAvailableFeatures(
ComputeAvailableFeatures(STI.ToggleFeature(FeatureString))); ComputeAvailableFeatures(STI.ToggleFeature(FeatureString)));
AssemblerOptions.back()->setFeatures(STI.getFeatureBits());
} }
AssemblerOptions.back()->setFeatures(getAvailableFeatures());
} }
public: public:
@ -369,11 +369,11 @@ public:
// Remember the initial assembler options. The user can not modify these. // Remember the initial assembler options. The user can not modify these.
AssemblerOptions.push_back( AssemblerOptions.push_back(
make_unique<MipsAssemblerOptions>(getAvailableFeatures())); llvm::make_unique<MipsAssemblerOptions>(STI.getFeatureBits()));
// Create an assembler options environment for the user to modify. // Create an assembler options environment for the user to modify.
AssemblerOptions.push_back( AssemblerOptions.push_back(
make_unique<MipsAssemblerOptions>(getAvailableFeatures())); llvm::make_unique<MipsAssemblerOptions>(STI.getFeatureBits()));
getTargetStreamer().updateABIInfo(*this); getTargetStreamer().updateABIInfo(*this);
@ -3603,7 +3603,9 @@ bool MipsAsmParser::parseSetPopDirective() {
return reportParseError(Loc, ".set pop with no .set push"); return reportParseError(Loc, ".set pop with no .set push");
AssemblerOptions.pop_back(); AssemblerOptions.pop_back();
setAvailableFeatures(AssemblerOptions.back()->getFeatures()); setAvailableFeatures(
ComputeAvailableFeatures(AssemblerOptions.back()->getFeatures()));
STI.setFeatureBits(AssemblerOptions.back()->getFeatures());
getTargetStreamer().emitDirectiveSetPop(); getTargetStreamer().emitDirectiveSetPop();
return false; return false;
@ -3673,7 +3675,9 @@ bool MipsAsmParser::parseSetMips0Directive() {
return reportParseError("unexpected token, expected end of statement"); return reportParseError("unexpected token, expected end of statement");
// Reset assembler options to their initial values. // 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()); AssemblerOptions.back()->setFeatures(AssemblerOptions.front()->getFeatures());
getTargetStreamer().emitDirectiveSetMips0(); getTargetStreamer().emitDirectiveSetMips0();

View File

@ -12,3 +12,12 @@
# CHECK: :[[@LINE-1]]:19: error: unexpected token, expected end of statement # CHECK: :[[@LINE-1]]:19: error: unexpected token, expected end of statement
.set pop bar .set pop bar
# CHECK: :[[@LINE-1]]:18: error: unexpected token, expected end of statement # 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

View File

@ -51,3 +51,20 @@
# CHECK: b 1336 # CHECK: b 1336
# CHECK: nop # CHECK: nop
# CHECK: addvi.b $w15, $w13, 18 # 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