aarch64: Add Apple runtime detection of dotprod and i8mm using sysctl

For now, there's not much value in this since Clang don't support
enabling the dotprod or i8mm features with either .arch_extension
or .arch (it has to be enabled by the base arch flags passed to
the compiler). But it may be supported in the future.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2023-05-26 10:20:21 +03:00
parent 493fcde50a
commit 9b0052200a
2 changed files with 24 additions and 0 deletions

2
configure vendored
View File

@ -2348,6 +2348,7 @@ SYSTEM_FUNCS="
strerror_r
sysconf
sysctl
sysctlbyname
usleep
UTGetOSTypeFromString
VirtualAlloc
@ -6394,6 +6395,7 @@ check_func_headers mach/mach_time.h mach_absolute_time
check_func_headers stdlib.h getenv
check_func_headers sys/stat.h lstat
check_func_headers sys/auxv.h getauxval
check_func_headers sys/sysctl.h sysctlbyname
check_func_headers windows.h GetModuleHandle
check_func_headers windows.h GetProcessAffinityMask

View File

@ -61,6 +61,28 @@ static int detect_flags(void)
return flags;
}
#elif defined(__APPLE__) && HAVE_SYSCTLBYNAME
#include <sys/sysctl.h>
static int detect_flags(void)
{
uint32_t value = 0;
size_t size;
int flags = 0;
size = sizeof(value);
if (!sysctlbyname("hw.optional.arm.FEAT_DotProd", &value, &size, NULL, 0)) {
if (value)
flags |= AV_CPU_FLAG_DOTPROD;
}
size = sizeof(value);
if (!sysctlbyname("hw.optional.arm.FEAT_I8MM", &value, &size, NULL, 0)) {
if (value)
flags |= AV_CPU_FLAG_I8MM;
}
return flags;
}
#else
static int detect_flags(void)