[llvm] [RISCV] Add support for getHostCPUFeatures using hwprobe (PR #94352)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 10 09:36:23 PDT 2024
================
@@ -1998,6 +1998,66 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
return true;
}
+#elif defined(__linux__) && defined(__riscv)
+// struct riscv_hwprobe
+struct RISCVHwProbe {
+ int64_t Key;
+ uint64_t Value;
+};
+bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
+ RISCVHwProbe Query[]{{/*RISCV_HWPROBE_KEY_IMA_EXT_0=*/4, 0}};
+ int Ret = syscall(/*__NR_riscv_hwprobe=*/258, /*pairs=*/Query,
+ /*pair_count=*/std::size(Query), /*cpu_count=*/0,
+ /*cpus=*/0, /*flags=*/0);
+ if (Ret != 0)
+ return false;
+
+ uint64_t ExtMask = Query[0].Value;
+ Features["f"] = ExtMask & (1 << 0); // RISCV_HWPROBE_IMA_FD
+ Features["d"] = ExtMask & (1 << 0); // RISCV_HWPROBE_IMA_FD
+ Features["c"] = ExtMask & (1 << 1); // RISCV_HWPROBE_IMA_C
+ Features["v"] = ExtMask & (1 << 2); // RISCV_HWPROBE_IMA_V
----------------
topperc wrote:
What about "a" and "m"? Do we need to check RISCV_HWPROBE_KEY_BASE_BEHAVIOR?
https://github.com/llvm/llvm-project/pull/94352
More information about the llvm-commits
mailing list