Skip to content

Commit 5e831a8

Browse files
committed
fix: Detection of HW caps and Num Cpus for FreeBSD(R) and OpenBSD(R)
Signed-off-by: Martin Filla <freebsd@sysctl.cz>
1 parent 753edfd commit 5e831a8

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

src/common/cpuinfo/CpuInfo.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -443,17 +443,22 @@ CpuInfo CpuInfo::build()
443443

444444
CpuIsaInfo isainfo;
445445
std::vector<CpuModel> cpus_model(ncpus);
446-
isainfo.neon = get_hw_capability("hw.optional.neon");
447-
isainfo.fp16 = get_hw_capability("hw.optional.neon_fp16");
448-
isainfo.dot = get_hw_capability("hw.optional.arm.FEAT_DotProd");
449-
isainfo.bf16 = get_hw_capability("hw.optional.arm.FEAT_BF16");
450-
isainfo.i8mm = get_hw_capability("hw.optional.arm.FEAT_I8MM");
451-
isainfo.sme = get_hw_capability("hw.optional.arm.FEAT_SME");
452-
isainfo.sme_f32f32 = get_hw_capability("hw.optional.arm.SME_F32F32");
453-
isainfo.sme_b16f32 = get_hw_capability("hw.optional.arm.SME_B16F32");
454-
isainfo.sme_f16f32 = get_hw_capability("hw.optional.arm.SME_F16F32");
455-
isainfo.sme_i8i32 = get_hw_capability("hw.optional.arm.SME_I8I32");
456-
isainfo.sme2 = get_hw_capability("hw.optional.arm.FEAT_SME2");
446+
447+
unsigned long hwcap = 0, hwcap2 = 0;
448+
elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
449+
elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
450+
451+
isainfo.neon = (hwcap & HWCAP_ASIMD) != 0;
452+
isainfo.fp16 = (hwcap & HWCAP_FPHP) != 0;
453+
isainfo.dot = (hwcap & HWCAP_ASIMDDP) != 0;
454+
isainfo.bf16 = (hwcap2 & HWCAP2_BF16) != 0;
455+
isainfo.i8mm = (hwcap2 & HWCAP2_I8MM) != 0;
456+
isainfo.sme = (hwcap2 & HWCAP2_SME) != 0;
457+
isainfo.sme2 = (hwcap2 & HWCAP2_SME2) != 0;
458+
isainfo.sme_f32f32 = (hwcap2 & HWCAP2_SME_F32F32) != 0;
459+
isainfo.sme_i8i32 = (hwcap2 & HWCAP2_SME_I8I32) != 0;
460+
isainfo.sme_f16f32 = (hwcap2 & HWCAP2_SME_F16F32) != 0;
461+
isainfo.sme_b16f32 = (hwcap2 & HWCAP2_SME_B16F32) != 0;
457462
CpuInfo info(isainfo, cpus_model);
458463
return info;
459464

0 commit comments

Comments
 (0)