mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-15 19:24:33 +00:00
[ARM] Add knowledge of FPU subtarget features to TargetParser
Add getFPUFeatures to TargetParser, which gets the list of subtarget features that are enabled/disabled for each FPU, and use it when handling the .fpu directive. No functional change in this commit, though clang will start behaving differently once it starts using this. Differential Revision: http://reviews.llvm.org/D10237 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239150 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -190,6 +190,38 @@ SubtargetFeatures::ToggleFeature(FeatureBitset Bits, StringRef Feature,
|
||||
return Bits;
|
||||
}
|
||||
|
||||
FeatureBitset
|
||||
SubtargetFeatures::ApplyFeatureFlag(FeatureBitset Bits, StringRef Feature,
|
||||
ArrayRef<SubtargetFeatureKV> FeatureTable) {
|
||||
|
||||
assert(hasFlag(Feature));
|
||||
|
||||
// Find feature in table.
|
||||
const SubtargetFeatureKV *FeatureEntry =
|
||||
Find(StripFlag(Feature), FeatureTable);
|
||||
// If there is a match
|
||||
if (FeatureEntry) {
|
||||
// Enable/disable feature in bits
|
||||
if (isEnabled(Feature)) {
|
||||
Bits |= FeatureEntry->Value;
|
||||
|
||||
// For each feature that this implies, set it.
|
||||
SetImpliedBits(Bits, FeatureEntry, FeatureTable);
|
||||
} else {
|
||||
Bits &= ~FeatureEntry->Value;
|
||||
|
||||
// For each feature that implies this, clear it.
|
||||
ClearImpliedBits(Bits, FeatureEntry, FeatureTable);
|
||||
}
|
||||
} else {
|
||||
errs() << "'" << Feature
|
||||
<< "' is not a recognized feature for this target"
|
||||
<< " (ignoring feature)\n";
|
||||
}
|
||||
|
||||
return Bits;
|
||||
}
|
||||
|
||||
|
||||
/// getFeatureBits - Get feature bits a CPU.
|
||||
///
|
||||
@@ -245,28 +277,7 @@ SubtargetFeatures::getFeatureBits(StringRef CPU,
|
||||
if (Feature == "+help")
|
||||
Help(CPUTable, FeatureTable);
|
||||
|
||||
// Find feature in table.
|
||||
const SubtargetFeatureKV *FeatureEntry =
|
||||
Find(StripFlag(Feature), FeatureTable);
|
||||
// If there is a match
|
||||
if (FeatureEntry) {
|
||||
// Enable/disable feature in bits
|
||||
if (isEnabled(Feature)) {
|
||||
Bits |= FeatureEntry->Value;
|
||||
|
||||
// For each feature that this implies, set it.
|
||||
SetImpliedBits(Bits, FeatureEntry, FeatureTable);
|
||||
} else {
|
||||
Bits &= ~FeatureEntry->Value;
|
||||
|
||||
// For each feature that implies this, clear it.
|
||||
ClearImpliedBits(Bits, FeatureEntry, FeatureTable);
|
||||
}
|
||||
} else {
|
||||
errs() << "'" << Feature
|
||||
<< "' is not a recognized feature for this target"
|
||||
<< " (ignoring feature)\n";
|
||||
}
|
||||
Bits = ApplyFeatureFlag(Bits, Feature, FeatureTable);
|
||||
}
|
||||
|
||||
return Bits;
|
||||
|
Reference in New Issue
Block a user