Skip to content

Commit f922dc5

Browse files
committed
[RISCV] Bump hwprobe support
1 parent 387bee9 commit f922dc5

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

llvm/lib/TargetParser/Host.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,7 +1969,8 @@ struct RISCVHwProbe {
19691969
};
19701970
const StringMap<bool> sys::getHostCPUFeatures() {
19711971
RISCVHwProbe Query[]{{/*RISCV_HWPROBE_KEY_BASE_BEHAVIOR=*/3, 0},
1972-
{/*RISCV_HWPROBE_KEY_IMA_EXT_0=*/4, 0}};
1972+
{/*RISCV_HWPROBE_KEY_IMA_EXT_0=*/4, 0},
1973+
{/*RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF=*/9, 0}};
19731974
int Ret = syscall(/*__NR_riscv_hwprobe=*/258, /*pairs=*/Query,
19741975
/*pair_count=*/std::size(Query), /*cpu_count=*/0,
19751976
/*cpus=*/0, /*flags=*/0);
@@ -2026,9 +2027,26 @@ const StringMap<bool> sys::getHostCPUFeatures() {
20262027
Features["zicond"] = ExtMask & (1ULL << 35); // RISCV_HWPROBE_EXT_ZICOND
20272028
Features["zihintpause"] =
20282029
ExtMask & (1ULL << 36); // RISCV_HWPROBE_EXT_ZIHINTPAUSE
2029-
2030-
// TODO: set unaligned-scalar-mem if RISCV_HWPROBE_KEY_MISALIGNED_PERF returns
2031-
// RISCV_HWPROBE_MISALIGNED_FAST.
2030+
Features["zve32x"] = ExtMask & (1ULL << 37); // RISCV_HWPROBE_EXT_ZVE32X
2031+
Features["zve32f"] = ExtMask & (1ULL << 38); // RISCV_HWPROBE_EXT_ZVE32F
2032+
Features["zve64x"] = ExtMask & (1ULL << 39); // RISCV_HWPROBE_EXT_ZVE64X
2033+
Features["zve64f"] = ExtMask & (1ULL << 40); // RISCV_HWPROBE_EXT_ZVE64F
2034+
Features["zve64d"] = ExtMask & (1ULL << 41); // RISCV_HWPROBE_EXT_ZVE64D
2035+
Features["zimop"] = ExtMask & (1ULL << 42); // RISCV_HWPROBE_EXT_ZIMOP
2036+
Features["zca"] = ExtMask & (1ULL << 43); // RISCV_HWPROBE_EXT_ZCA
2037+
Features["zcb"] = ExtMask & (1ULL << 44); // RISCV_HWPROBE_EXT_ZCB
2038+
Features["zcd"] = ExtMask & (1ULL << 45); // RISCV_HWPROBE_EXT_ZCD
2039+
Features["zcf"] = ExtMask & (1ULL << 46); // RISCV_HWPROBE_EXT_ZCF
2040+
Features["zcmop"] = ExtMask & (1ULL << 47); // RISCV_HWPROBE_EXT_ZCMOP
2041+
Features["zawrs"] = ExtMask & (1ULL << 48); // RISCV_HWPROBE_EXT_ZAWRS
2042+
2043+
// Check whether the processor supports fast misaligned scalar memory access.
2044+
// NOTE: RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF is only available on
2045+
// Linux 6.11 or later. If it is not recognized, the key field will be cleared
2046+
// to -1.
2047+
if (Query[2].Key != -1 &&
2048+
Query[2].Value == /*RISCV_HWPROBE_MISALIGNED_SCALAR_FAST=*/3)
2049+
Features["unaligned-scalar-mem"] = true;
20322050

20332051
return Features;
20342052
}

0 commit comments

Comments
 (0)