mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Make host ARM CPU feature detection independent of the vendor
For ARM on linux we use /proc/cpuinfo to detect the host CPU's features. Linux derives these values without ever looking at the vendor of the specific CPU implementation. Hence, it adds little value, if we parse the output of /proc/cpuinfo only for certain vendors. This patch enables us to derive the correct feature flags e.g. for Qualcomm CPUs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183790 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1a4f2a33fb
commit
a85644459c
@ -570,41 +570,31 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
|
||||
SmallVector<StringRef, 32> Lines;
|
||||
Str.split(Lines, "\n");
|
||||
|
||||
// Look for the CPU implementer line.
|
||||
StringRef Implementer;
|
||||
SmallVector<StringRef, 32> CPUFeatures;
|
||||
|
||||
// Look for the CPU features.
|
||||
for (unsigned I = 0, E = Lines.size(); I != E; ++I)
|
||||
if (Lines[I].startswith("CPU implementer"))
|
||||
Implementer = Lines[I].substr(15).ltrim("\t :");
|
||||
|
||||
if (Implementer == "0x41") { // ARM Ltd.
|
||||
SmallVector<StringRef, 32> CPUFeatures;
|
||||
|
||||
// Look for the CPU features.
|
||||
for (unsigned I = 0, E = Lines.size(); I != E; ++I)
|
||||
if (Lines[I].startswith("Features")) {
|
||||
Lines[I].split(CPUFeatures, " ");
|
||||
break;
|
||||
}
|
||||
|
||||
for (unsigned I = 0, E = CPUFeatures.size(); I != E; ++I) {
|
||||
StringRef LLVMFeatureStr = StringSwitch<StringRef>(CPUFeatures[I])
|
||||
.Case("half", "fp16")
|
||||
.Case("neon", "neon")
|
||||
.Case("vfpv3", "vfp3")
|
||||
.Case("vfpv3d16", "d16")
|
||||
.Case("vfpv4", "vfp4")
|
||||
.Case("idiva", "hwdiv-arm")
|
||||
.Case("idivt", "hwdiv")
|
||||
.Default("");
|
||||
|
||||
if (LLVMFeatureStr != "")
|
||||
Features.GetOrCreateValue(LLVMFeatureStr).setValue(true);
|
||||
if (Lines[I].startswith("Features")) {
|
||||
Lines[I].split(CPUFeatures, " ");
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
for (unsigned I = 0, E = CPUFeatures.size(); I != E; ++I) {
|
||||
StringRef LLVMFeatureStr = StringSwitch<StringRef>(CPUFeatures[I])
|
||||
.Case("half", "fp16")
|
||||
.Case("neon", "neon")
|
||||
.Case("vfpv3", "vfp3")
|
||||
.Case("vfpv3d16", "d16")
|
||||
.Case("vfpv4", "vfp4")
|
||||
.Case("idiva", "hwdiv-arm")
|
||||
.Case("idivt", "hwdiv")
|
||||
.Default("");
|
||||
|
||||
if (LLVMFeatureStr != "")
|
||||
Features.GetOrCreateValue(LLVMFeatureStr).setValue(true);
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
bool sys::getHostCPUFeatures(StringMap<bool> &Features){
|
||||
|
Loading…
Reference in New Issue
Block a user