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@comstyle.com>
This commit is contained in:
Brad Smith 2024-09-09 07:44:12 -04:00
parent 9e1682761f
commit 2bf588f273
1 changed files with 25 additions and 0 deletions

View File

@ -20,6 +20,11 @@
#ifdef __APPLE__ #ifdef __APPLE__
#include <sys/sysctl.h> #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__) #elif defined(__linux__)
#include <asm/cputable.h> #include <asm/cputable.h>
#include <linux/auxvec.h> #include <linux/auxvec.h>
@ -56,6 +61,26 @@ int ff_get_cpu_flags_ppc(void)
if (result == VECTORTYPE_ALTIVEC) if (result == VECTORTYPE_ALTIVEC)
return AV_CPU_FLAG_ALTIVEC; return AV_CPU_FLAG_ALTIVEC;
return 0; 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__) #elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
#if defined(__NetBSD__) || defined(__OpenBSD__) #if defined(__NetBSD__) || defined(__OpenBSD__)
int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC}; int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC};