[x265] [PATCH 3/6] Add Apple Silicon run-time CPU feature detection
Hari Limaye
hari.limaye at arm.com
Thu Oct 24 23:28:21 UTC 2024
Add run-time CPU feature detection for ISA extensions on Apple Silicon
platforms.
---
source/CMakeLists.txt | 2 +-
source/common/aarch64/cpu.h | 40 ++++++++++++++++++++++++++++++++++---
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index cc114bc95..cb513db8e 100755
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -88,7 +88,7 @@ elseif(ARM64MATCH GREATER "-1")
option(AARCH64_WARNINGS_AS_ERRORS "Build with -Werror for AArch64 Intrinsics files" OFF)
option(AARCH64_RUNTIME_CPU_DETECT "Enable AArch64 run-time CPU feature detection" ON)
- if(NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+ if(NOT CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
set(AARCH64_RUNTIME_CPU_DETECT OFF CACHE BOOL "" FORCE)
message(STATUS "Run-time CPU feature detection unsupported on this platform")
endif()
diff --git a/source/common/aarch64/cpu.h b/source/common/aarch64/cpu.h
index 88ce2e310..857ba980a 100644
--- a/source/common/aarch64/cpu.h
+++ b/source/common/aarch64/cpu.h
@@ -28,7 +28,41 @@
#if AARCH64_RUNTIME_CPU_DETECT
-#if defined(__linux__)
+#if defined(__APPLE__)
+
+#include <sys/sysctl.h>
+
+static inline bool have_feature(const char *feature)
+{
+ int64_t feature_present = 0;
+ size_t size = sizeof(feature_present);
+ if (sysctlbyname(feature, &feature_present, &size, NULL, 0) != 0)
+ {
+ return false;
+ }
+ return feature_present;
+}
+
+static inline int aarch64_get_cpu_flags()
+{
+ int flags = 0;
+
+#if HAVE_NEON
+ flags |= X265_CPU_NEON;
+#endif
+#if HAVE_NEON_DOTPROD
+ if (have_feature("hw.optional.arm.FEAT_DotProd"))
+ flags |= X265_CPU_NEON_DOTPROD;
+#endif
+#if HAVE_NEON_I8MM
+ if (have_feature("hw.optional.arm.FEAT_I8MM"))
+ flags |= X265_CPU_NEON_I8MM;
+#endif
+
+ return flags;
+}
+
+#elif defined(__linux__)
#include <sys/auxv.h>
@@ -67,12 +101,12 @@ static inline int aarch64_get_cpu_flags()
return flags;
}
-#else // defined(__linux__)
+#else // defined(__APPLE__)
#error \
"Run-time CPU feature detection selected, but no detection method" \
"available for your platform. Rerun cmake configure with" \
"-DAARCH64_RUNTIME_CPU_DETECT=OFF."
-#endif // defined(__linux__)
+#endif // defined(__APPLE__)
static inline int aarch64_cpu_detect()
{
--
2.42.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Add-Apple-Silicon-run-time-CPU-feature-detection.patch
Type: text/x-patch
Size: 2873 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20241025/8feebfb9/attachment.bin>
More information about the x265-devel
mailing list