[FFmpeg-cvslog] libavutil/ppc: Make use of getauxval() and elf_aux_info() on ppc
Brad Smith
git at videolan.org
Sat Sep 21 11:49:37 EEST 2024
ffmpeg | branch: master | Brad Smith <brad at comstyle.com> | Mon Sep 9 07:44:12 2024 -0400| [2bf588f273432344d95164c7f83832839a938088] | committer: Brad Smith
libavutil/ppc: Make use of getauxval() and elf_aux_info() on ppc
Modern Linux has getauxval() and FreeBSD/OpenBSD ppc have elf_aux_info().
Signed-off-by: Brad Smith <brad at comstyle.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2bf588f273432344d95164c7f83832839a938088
---
libavutil/ppc/cpu.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/libavutil/ppc/cpu.c b/libavutil/ppc/cpu.c
index 2b13cda662..9381272175 100644
--- a/libavutil/ppc/cpu.c
+++ b/libavutil/ppc/cpu.c
@@ -20,6 +20,11 @@
#ifdef __APPLE__
#include <sys/sysctl.h>
+#elif HAVE_GETAUXVAL || HAVE_ELF_AUX_INFO
+#ifdef __FreeBSD__
+#include <machine/cpu.h>
+#endif
+#include <sys/auxv.h>
#elif defined(__linux__)
#include <asm/cputable.h>
#include <linux/auxvec.h>
@@ -56,6 +61,26 @@ int ff_get_cpu_flags_ppc(void)
if (result == VECTORTYPE_ALTIVEC)
return AV_CPU_FLAG_ALTIVEC;
return 0;
+#elif HAVE_GETAUXVAL || HAVE_ELF_AUX_INFO
+ int flags = 0;
+
+ unsigned long hwcap = ff_getauxval(AT_HWCAP);
+#ifdef PPC_FEATURE2_ARCH_2_07
+ unsigned long hwcap2 = ff_getauxval(AT_HWCAP2);
+#endif
+
+ if (hwcap & PPC_FEATURE_HAS_ALTIVEC)
+ flags |= AV_CPU_FLAG_ALTIVEC;
+#ifdef PPC_FEATURE_HAS_VSX
+ if (hwcap & PPC_FEATURE_HAS_VSX)
+ flags |= AV_CPU_FLAG_VSX;
+#endif
+#ifdef PPC_FEATURE2_ARCH_2_07
+ if (hwcap2 & PPC_FEATURE2_ARCH_2_07)
+ flags |= AV_CPU_FLAG_POWER8;
+#endif
+
+ return flags;
#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
#if defined(__NetBSD__) || defined(__OpenBSD__)
int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC};
More information about the ffmpeg-cvslog
mailing list