aarch64: Factorize code for CPU feature detection on Apple platforms

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2024-03-12 10:23:15 +02:00
parent 41b73ae883
commit 8339a45400
1 changed files with 13 additions and 12 deletions

View File

@ -45,22 +45,23 @@ static int detect_flags(void)
#elif defined(__APPLE__) && HAVE_SYSCTLBYNAME
#include <sys/sysctl.h>
static int have_feature(const char *feature) {
uint32_t value = 0;
size_t size = sizeof(value);
if (!sysctlbyname(feature, &value, &size, NULL, 0))
return value;
return 0;
}
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;
}
if (have_feature("hw.optional.arm.FEAT_DotProd"))
flags |= AV_CPU_FLAG_DOTPROD;
if (have_feature("hw.optional.arm.FEAT_I8MM"))
flags |= AV_CPU_FLAG_I8MM;
return flags;
}