[llvm] [RISCV] Add support for getHostCPUFeatures using hwprobe (PR #94352)
Pengcheng Wang via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 4 06:25:49 PDT 2024
================
@@ -1998,6 +1998,74 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
return true;
}
+#elif defined(__linux__) && defined(__riscv)
+#ifdef __has_include
+#if __has_include(<asm/hwprobe.h>)
+#include <asm/hwprobe.h>
+#endif
+#endif
+bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
+#ifdef RISCV_HWPROBE_KEY_MVENDORID
+ riscv_hwprobe Query[2]{
+ {RISCV_HWPROBE_KEY_IMA_EXT_0, 0},
+ {RISCV_HWPROBE_KEY_CPUPERF_0, 0},
+ };
+ int Ret = syscall(/*__NR_riscv_hwprobe=*/258, /*pairs=*/&Query,
+ /*pair_count=*/1, /*cpu_count=*/0, /*cpus=*/0, /*flags=*/0);
+ if (Ret != 0)
+ return false;
+
+ uint64_t ExtMask = Query[0].value;
+ Features["f"] = ExtMask & RISCV_HWPROBE_IMA_FD;
+ Features["d"] = ExtMask & RISCV_HWPROBE_IMA_FD;
+ Features["c"] = ExtMask & RISCV_HWPROBE_IMA_C;
+ Features["v"] = ExtMask & RISCV_HWPROBE_IMA_V;
+ Features["zba"] = ExtMask & RISCV_HWPROBE_IMA_ZBA;
+ Features["zbb"] = ExtMask & RISCV_HWPROBE_IMA_ZBB;
+ Features["zbs"] = ExtMask & RISCV_HWPROBE_IMA_ZBS;
+ Features["zicboz"] = ExtMask & RISCV_HWPROBE_IMA_ZICBOZ;
+ Features["zbc"] = ExtMask & RISCV_HWPROBE_IMA_ZBC;
+ Features["zbkb"] = ExtMask & RISCV_HWPROBE_IMA_ZBKB;
+ Features["zbkc"] = ExtMask & RISCV_HWPROBE_IMA_ZBKC;
+ Features["zbkx"] = ExtMask & RISCV_HWPROBE_IMA_ZBKX;
+ Features["zknd"] = ExtMask & RISCV_HWPROBE_IMA_ZKND;
+ Features["zkne"] = ExtMask & RISCV_HWPROBE_IMA_ZKNE;
+ Features["zknh"] = ExtMask & RISCV_HWPROBE_IMA_ZKNH;
+ Features["zksed"] = ExtMask & RISCV_HWPROBE_IMA_ZKSED;
+ Features["zksh"] = ExtMask & RISCV_HWPROBE_IMA_ZKSH;
+ Features["zkt"] = ExtMask & RISCV_HWPROBE_IMA_ZKT;
+ Features["zvbb"] = ExtMask & RISCV_HWPROBE_IMA_ZVBB;
+ Features["zvbc"] = ExtMask & RISCV_HWPROBE_IMA_ZVBC;
+ Features["zvkb"] = ExtMask & RISCV_HWPROBE_IMA_ZVKB;
+ Features["zvkg"] = ExtMask & RISCV_HWPROBE_IMA_ZVKG;
+ Features["zvkned"] = ExtMask & RISCV_HWPROBE_IMA_ZVKNED;
+ Features["zvknha"] = ExtMask & RISCV_HWPROBE_IMA_ZVKNHA;
+ Features["zvknhb"] = ExtMask & RISCV_HWPROBE_IMA_ZVKNHB;
+ Features["zvksed"] = ExtMask & RISCV_HWPROBE_IMA_ZVKSED;
----------------
wangpc-pp wrote:
One concern: we may not support all these MACROs in particular kernel version. For example, we don't have Vector Crypto support in v6.6 LTS.
https://github.com/llvm/llvm-project/pull/94352
More information about the llvm-commits
mailing list