From: David CARLIER Date: Fri, 1 Jan 2021 08:56:10 +0000 (+0000) Subject: darwin ios/mac m1 cpu features detection update proposal X-Git-Tag: v2.0.0-RC1~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53a2b839ea798409445904ac3a36bb5ba96580ab;p=thirdparty%2Fzlib-ng.git darwin ios/mac m1 cpu features detection update proposal --- diff --git a/arch/arm/armfeature.c b/arch/arm/armfeature.c index f3764fd1d..cf31a48f0 100644 --- a/arch/arm/armfeature.c +++ b/arch/arm/armfeature.c @@ -8,6 +8,8 @@ # ifndef ID_AA64ISAR0_CRC32_VAL # define ID_AA64ISAR0_CRC32_VAL ID_AA64ISAR0_CRC32 # endif +#elif defined(__APPLE__) +# include #elif defined(_WIN32) # include #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 */