@@ -435,9 +435,28 @@ CpuInfo CpuInfo::build()
435435 std::vector<CpuModel> cpus_model (1 , midr_to_model (midr));
436436 CpuInfo info (isa, cpus_model);
437437 return info;
438- #elif defined(__aarch64__) && (defined(__OpenBSD__) || defined(__FreeBSD__) || \
439- defined (__APPLE__)) /* #elif(BARE_METAL) && defined(__aarch64__) */
440- int ncpus = get_hw_capability (" hw.perflevel0.logicalcpu" );
438+
439+ #elif defined(__aarch64__) && (defined(__OpenBSD__) || defined(__FreeBSD__))
440+ /* #elif(BARE_METAL) && defined(__aarch64__) */
441+ int ncpus = get_hw_capability (" hw.ncpu" );
442+ CpuIsaInfo isainfo;
443+ std::vector<CpuModel> cpus_model (ncpus);
444+ isainfo.neon = get_hw_capability (" hw.optional.neon" );
445+ isainfo.fp16 = get_hw_capability (" hw.optional.neon_fp16" );
446+ isainfo.dot = get_hw_capability (" hw.optional.arm.FEAT_DotProd" );
447+ isainfo.bf16 = get_hw_capability (" hw.optional.arm.FEAT_BF16" );
448+ isainfo.i8mm = get_hw_capability (" hw.optional.arm.FEAT_I8MM" );
449+ isainfo.sme = get_hw_capability (" hw.optional.arm.FEAT_SME" );
450+ isainfo.sme_f32f32 = get_hw_capability (" hw.optional.arm.SME_F32F32" );
451+ isainfo.sme_b16f32 = get_hw_capability (" hw.optional.arm.SME_B16F32" );
452+ isainfo.sme_f16f32 = get_hw_capability (" hw.optional.arm.SME_F16F32" );
453+ isainfo.sme_i8i32 = get_hw_capability (" hw.optional.arm.SME_I8I32" );
454+ isainfo.sme2 = get_hw_capability (" hw.optional.arm.FEAT_SME2" );
455+ CpuInfo info (isainfo, cpus_model);
456+ return info;
457+
458+ #elif defined(__aarch64__) && defined(__APPLE__)
459+ int ncpus = get_hw_capability (" hw.perflevel0.logicalcpu" );
441460 CpuIsaInfo isainfo;
442461 std::vector<CpuModel> cpus_model (ncpus);
443462 isainfo.neon = get_hw_capability (" hw.optional.neon" );
0 commit comments