[PATCH] Extend sys::getHostCPUFeatures to work on AArch64 platforms
Bradley Smith
bradley.smith at arm.com
Thu May 22 04:20:47 PDT 2014
Update patch to use a local enum in place of hardcoded bit values.
http://reviews.llvm.org/D3869
Files:
lib/Support/Host.cpp
Index: lib/Support/Host.cpp
===================================================================
--- lib/Support/Host.cpp
+++ lib/Support/Host.cpp
@@ -686,7 +686,7 @@
}
#endif
-#if defined(__linux__) && defined(__arm__)
+#if defined(__linux__) && (defined(__arm__) || defined(__aarch64__))
bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
std::string Err;
DataStreamer *DS = getDataFileStreamer("/proc/cpuinfo", &Err);
@@ -715,21 +715,57 @@
break;
}
+#if defined(__aarch64__)
+ // Keep track of which crypto features we have seen
+ enum {
+ HWCAP_AES = 0x1,
+ HWCAP_PMULL = 0x2,
+ HWCAP_SHA1 = 0x4,
+ HWCAP_SHA2 = 0x8
+ };
+ uint32_t crypto = 0;
+#endif
+
for (unsigned I = 0, E = CPUFeatures.size(); I != E; ++I) {
StringRef LLVMFeatureStr = StringSwitch<StringRef>(CPUFeatures[I])
+#if defined(__aarch64__)
+ .Case("asimd", "neon")
+ .Case("fp", "fp-armv8")
+ .Case("crc32", "crc")
+#else
.Case("half", "fp16")
.Case("neon", "neon")
.Case("vfpv3", "vfp3")
.Case("vfpv3d16", "d16")
.Case("vfpv4", "vfp4")
.Case("idiva", "hwdiv-arm")
.Case("idivt", "hwdiv")
+#endif
.Default("");
+#if defined(__aarch64__)
+ // We need to check crypto seperately since we need all of the crypto
+ // extensions to enable the subtarget feature
+ if (CPUFeatures[I] == "aes")
+ crypto |= HWCAP_AES;
+ else if (CPUFeatures[I] == "pmull")
+ crypto |= HWCAP_PMULL;
+ else if (CPUFeatures[I] == "sha1")
+ crypto |= HWCAP_SHA1;
+ else if (CPUFeatures[I] == "sha2")
+ crypto |= HWCAP_SHA2;
+#endif
+
if (LLVMFeatureStr != "")
Features.GetOrCreateValue(LLVMFeatureStr).setValue(true);
}
+#if defined(__aarch64__)
+ // If we have all crypto bits we can add the feature
+ if (crypto == (HWCAP_AES | HWCAP_PMULL | HWCAP_SHA1 | HWCAP_SHA2))
+ Features.GetOrCreateValue("crypto").setValue(true);
+#endif
+
return true;
}
#else
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3869.9689.patch
Type: text/x-patch
Size: 1995 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140522/bcb42e79/attachment.bin>
More information about the llvm-commits
mailing list