]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
darwin ios/mac m1 cpu features detection update proposal
authorDavid CARLIER <devnexen@gmail.com>
Fri, 1 Jan 2021 08:56:10 +0000 (08:56 +0000)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Tue, 5 Jan 2021 16:06:17 +0000 (17:06 +0100)
arch/arm/armfeature.c

index f3764fd1db62def781ad2eabba2811f8b3ae6307..cf31a48f0cfdf83e4db4d07a502d8466b7889f98 100644 (file)
@@ -8,6 +8,8 @@
 #  ifndef ID_AA64ISAR0_CRC32_VAL
 #    define ID_AA64ISAR0_CRC32_VAL ID_AA64ISAR0_CRC32
 #  endif
+#elif defined(__APPLE__)
+#  include <sys/sysctl.h>
 #elif defined(_WIN32)
 #  include <winapifamily.h>
 #endif
@@ -18,6 +20,11 @@ static int arm_has_crc32() {
 #elif defined(__FreeBSD__) && defined(__aarch64__)
     return getenv("QEMU_EMULATING") == NULL
       && ID_AA64ISAR0_CRC32_VAL(READ_SPECIALREG(id_aa64isar0_el1)) >= ID_AA64ISAR0_CRC32_BASE;
+#elif defined(__APPLE__)
+    int hascrc32;
+    size_t size = sizeof(hascrc32);
+    return sysctlbyname("hw.optional.armv8_crc32", &hascrc32, &size, NULL, 0) == 0
+      && hascrc32 == 1;
 #elif defined(ARM_NOCHECK_ACLE)
     return 1;
 #else
@@ -30,6 +37,11 @@ static int arm_has_crc32() {
 static inline int arm_has_neon() {
 #if defined(__linux__) && defined(HWCAP_NEON)
     return (getauxval(AT_HWCAP) & HWCAP_NEON) != 0 ? 1 : 0;
+#elif defined(__APPLE__)
+    int hasneon;
+    size_t size = sizeof(hasneon);
+    return sysctlbyname("hw.optional.neon", &hasneon, &size, NULL, 0) == 0
+      && hasneon == 1;
 #elif defined(_M_ARM) && defined(WINAPI_FAMILY_PARTITION)
 #  if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
     return 1; /* Always supported */