From 641201a99a5a18810ee21c0979717bc6ec71c704 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 27 Sep 2025 03:36:00 -0400 Subject: [PATCH] Use elf_aux_info() on OpenBSD NFC for ARMv7. For PowerPC move elf_aux_info() to higher priority over sysctl for newer systems. (cherry picked from commit b299e0de4635e732c63744303f27f4b21a72751c) --- src/cpuinfo/SDL_cpuinfo.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index b0e31531ba..28d1374da4 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -50,13 +50,12 @@ #endif #if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__)) #include /* For AltiVec check */ -#elif defined(__OpenBSD__) && defined(__powerpc__) +#elif defined(__OpenBSD__) && defined(__powerpc__) && !defined(HAVE_ELF_AUX_INFO) #include #include /* For AltiVec check */ #include -#elif defined(__FreeBSD__) && defined(__powerpc__) +#elif defined(__FreeBSD__) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO) #include -#include #elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP) #include #include @@ -343,7 +342,12 @@ static int CPU_haveAltiVec(void) { volatile int altivec = 0; #ifndef SDL_CPUINFO_DISABLED -#if (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__)) +#if (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO) + unsigned long cpufeatures = 0; + elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures)); + altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC; + return altivec; +#elif (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__)) #ifdef __OpenBSD__ int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC }; #else @@ -355,11 +359,6 @@ static int CPU_haveAltiVec(void) if (0 == error) { altivec = (hasVectorUnit != 0); } -#elif defined(__FreeBSD__) && defined(__powerpc__) - unsigned long cpufeatures = 0; - elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures)); - altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC; - return altivec; #elif defined(__LINUX__) && defined(__powerpc__) && defined(HAVE_GETAUXVAL) altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC; #elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP) @@ -489,8 +488,6 @@ static int CPU_haveNEON(void) return 0; /* assume anything else from Apple doesn't have NEON. */ #elif !defined(__arm__) return 0; /* not an ARM CPU at all. */ -#elif defined(__OpenBSD__) - return 1; /* OpenBSD only supports ARMv7 CPUs that have NEON. */ #elif defined(HAVE_ELF_AUX_INFO) unsigned long hasneon = 0; if (elf_aux_info(AT_HWCAP, (void *)&hasneon, (int)sizeof(hasneon)) != 0) { @@ -527,6 +524,8 @@ static int CPU_haveNEON(void) } return 0; } +#elif defined(__OpenBSD__) + return 1; /* OpenBSD only supports ARMv7 CPUs that have NEON. */ #else #warning SDL_HasNEON is not implemented for this ARM platform. Write me. return 0;