Skip to content

Commit bc061e0

Browse files
committed
[RISCV] Bump hwprobe support
1 parent d8f555d commit bc061e0

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
@@ -1988,7 +1988,8 @@ struct RISCVHwProbe {
19881988
};
19891989
const StringMap<bool> sys::getHostCPUFeatures() {
19901990
RISCVHwProbe Query[]{{/*RISCV_HWPROBE_KEY_BASE_BEHAVIOR=*/3, 0},
1991-
{/*RISCV_HWPROBE_KEY_IMA_EXT_0=*/4, 0}};
1991+
{/*RISCV_HWPROBE_KEY_IMA_EXT_0=*/4, 0},
1992+
{/*RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF=*/9, 0}};
19921993
int Ret = syscall(/*__NR_riscv_hwprobe=*/258, /*pairs=*/Query,
19931994
/*pair_count=*/std::size(Query), /*cpu_count=*/0,
19941995
/*cpus=*/0, /*flags=*/0);
@@ -2044,9 +2045,26 @@ const StringMap<bool> sys::getHostCPUFeatures() {
20442045
Features["zicond"] = ExtMask & (1ULL << 35); // RISCV_HWPROBE_EXT_ZICOND
20452046
Features["zihintpause"] =
20462047
ExtMask & (1ULL << 36); // RISCV_HWPROBE_EXT_ZIHINTPAUSE
2047-
2048-
// TODO: set unaligned-scalar-mem if RISCV_HWPROBE_KEY_MISALIGNED_PERF returns
2049-
// RISCV_HWPROBE_MISALIGNED_FAST.
2048+
Features["zve32x"] = ExtMask & (1ULL << 37); // RISCV_HWPROBE_EXT_ZVE32X
2049+
Features["zve32f"] = ExtMask & (1ULL << 38); // RISCV_HWPROBE_EXT_ZVE32F
2050+
Features["zve64x"] = ExtMask & (1ULL << 39); // RISCV_HWPROBE_EXT_ZVE64X
2051+
Features["zve64f"] = ExtMask & (1ULL << 40); // RISCV_HWPROBE_EXT_ZVE64F
2052+
Features["zve64d"] = ExtMask & (1ULL << 41); // RISCV_HWPROBE_EXT_ZVE64D
2053+
Features["zimop"] = ExtMask & (1ULL << 42); // RISCV_HWPROBE_EXT_ZIMOP
2054+
Features["zca"] = ExtMask & (1ULL << 43); // RISCV_HWPROBE_EXT_ZCA
2055+
Features["zcb"] = ExtMask & (1ULL << 44); // RISCV_HWPROBE_EXT_ZCB
2056+
Features["zcd"] = ExtMask & (1ULL << 45); // RISCV_HWPROBE_EXT_ZCD
2057+
Features["zcf"] = ExtMask & (1ULL << 46); // RISCV_HWPROBE_EXT_ZCF
2058+
Features["zcmop"] = ExtMask & (1ULL << 47); // RISCV_HWPROBE_EXT_ZCMOP
2059+
Features["zawrs"] = ExtMask & (1ULL << 48); // RISCV_HWPROBE_EXT_ZAWRS
2060+
2061+
// Check whether the processor supports fast misaligned scalar memory access.
2062+
// NOTE: RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF is only available on
2063+
// Linux 6.11 or later. If it is not recognized, the key field will be cleared
2064+
// to -1.
2065+
if (Query[2].Key != -1 &&
2066+
Query[2].Value == /*RISCV_HWPROBE_MISALIGNED_SCALAR_FAST=*/3)
2067+
Features["unaligned-scalar-mem"] = true;
20502068

20512069
return Features;
20522070
}

0 commit comments

Comments
 (0)