|
60 | 60 | #elif (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)) && defined(__aarch64__) |
61 | 61 | #include <sys/sysctl.h> |
62 | 62 | #include <sys/types.h> |
| 63 | +#include <unistd.h> |
63 | 64 | #endif /* defined(__APPLE__) && defined(__aarch64__)) */ |
64 | 65 | #endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) */ |
65 | 66 |
|
@@ -435,9 +436,34 @@ CpuInfo CpuInfo::build() |
435 | 436 | std::vector<CpuModel> cpus_model(1, midr_to_model(midr)); |
436 | 437 | CpuInfo info(isa, cpus_model); |
437 | 438 | 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"); |
| 439 | + |
| 440 | +#elif defined(__aarch64__) && (defined(__OpenBSD__) || defined(__FreeBSD__)) |
| 441 | + /* #elif(BARE_METAL) && defined(__aarch64__) */ |
| 442 | + int ncpus = sysconf(_SC_NPROCESSORS_ONLN); |
| 443 | + |
| 444 | + CpuIsaInfo isainfo; |
| 445 | + std::vector<CpuModel> cpus_model(ncpus); |
| 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; |
| 462 | + CpuInfo info(isainfo, cpus_model); |
| 463 | + return info; |
| 464 | + |
| 465 | +#elif defined(__aarch64__) && defined(__APPLE__) |
| 466 | + int ncpus = get_hw_capability("hw.perflevel0.logicalcpu"); |
441 | 467 | CpuIsaInfo isainfo; |
442 | 468 | std::vector<CpuModel> cpus_model(ncpus); |
443 | 469 | isainfo.neon = get_hw_capability("hw.optional.neon"); |
|
0 commit comments