Skip to content

Commit b299e0d

Browse files
brad0slouken
authored andcommitted
Use elf_aux_info() on OpenBSD
NFC for ARMv7. For PowerPC move elf_aux_info() to higher priority over sysctl for newer systems.
1 parent c39d772 commit b299e0d

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/cpuinfo/SDL_cpuinfo.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,12 @@
3838
#endif
3939
#if defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))
4040
#include <sys/sysctl.h> // For AltiVec check
41-
#elif defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__)
41+
#elif defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__) && !defined(HAVE_ELF_AUX_INFO)
4242
#include <sys/types.h>
4343
#include <sys/sysctl.h> // For AltiVec check
4444
#include <machine/cpu.h>
45-
#elif defined(SDL_PLATFORM_FREEBSD) && defined(__powerpc__)
45+
#elif defined(SDL_PLATFORM_FREEBSD) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO)
4646
#include <machine/cpu.h>
47-
#include <sys/auxv.h>
4847
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
4948
#include <signal.h>
5049
#include <setjmp.h>
@@ -331,7 +330,12 @@ static int CPU_haveAltiVec(void)
331330
{
332331
volatile int altivec = 0;
333332
#ifndef SDL_CPUINFO_DISABLED
334-
#if (defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))) || (defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__))
333+
#if (defined(SDL_PLATFORM_FREEBSD) || defined(SDL_PLATFORM_OPENBSD)) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO)
334+
unsigned long cpufeatures = 0;
335+
elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures));
336+
altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC;
337+
return altivec;
338+
#elif (defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))) || (defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__))
335339
#ifdef SDL_PLATFORM_OPENBSD
336340
int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
337341
#else
@@ -343,11 +347,6 @@ static int CPU_haveAltiVec(void)
343347
if (0 == error) {
344348
altivec = (hasVectorUnit != 0);
345349
}
346-
#elif defined(SDL_PLATFORM_FREEBSD) && defined(__powerpc__)
347-
unsigned long cpufeatures = 0;
348-
elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures));
349-
altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC;
350-
return altivec;
351350
#elif defined(SDL_PLATFORM_LINUX) && defined(__powerpc__) && defined(HAVE_GETAUXVAL)
352351
altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC;
353352
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
@@ -483,8 +482,6 @@ static int CPU_haveNEON(void)
483482
return 0; // assume anything else from Apple doesn't have NEON.
484483
#elif !defined(__arm__)
485484
return 0; // not an ARM CPU at all.
486-
#elif defined(SDL_PLATFORM_OPENBSD)
487-
return 1; // OpenBSD only supports ARMv7 CPUs that have NEON.
488485
#elif defined(HAVE_ELF_AUX_INFO)
489486
unsigned long hasneon = 0;
490487
if (elf_aux_info(AT_HWCAP, (void *)&hasneon, (int)sizeof(hasneon)) != 0) {
@@ -519,6 +516,8 @@ static int CPU_haveNEON(void)
519516
}
520517
return 0;
521518
}
519+
#elif defined(SDL_PLATFORM_OPENBSD)
520+
return 1; // OpenBSD only supports ARMv7 CPUs that have NEON.
522521
#elif defined(SDL_PLATFORM_EMSCRIPTEN)
523522
return 0;
524523
#else

0 commit comments

Comments
 (0)