Skip to content

Commit 641201a

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. (cherry picked from commit b299e0d)
1 parent 7b28fb2 commit 641201a

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
@@ -50,13 +50,12 @@
5050
#endif
5151
#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
5252
#include <sys/sysctl.h> /* For AltiVec check */
53-
#elif defined(__OpenBSD__) && defined(__powerpc__)
53+
#elif defined(__OpenBSD__) && defined(__powerpc__) && !defined(HAVE_ELF_AUX_INFO)
5454
#include <sys/types.h>
5555
#include <sys/sysctl.h> /* For AltiVec check */
5656
#include <machine/cpu.h>
57-
#elif defined(__FreeBSD__) && defined(__powerpc__)
57+
#elif defined(__FreeBSD__) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO)
5858
#include <machine/cpu.h>
59-
#include <sys/auxv.h>
6059
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
6160
#include <signal.h>
6261
#include <setjmp.h>
@@ -343,7 +342,12 @@ static int CPU_haveAltiVec(void)
343342
{
344343
volatile int altivec = 0;
345344
#ifndef SDL_CPUINFO_DISABLED
346-
#if (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__))
345+
#if (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO)
346+
unsigned long cpufeatures = 0;
347+
elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures));
348+
altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC;
349+
return altivec;
350+
#elif (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__))
347351
#ifdef __OpenBSD__
348352
int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
349353
#else
@@ -355,11 +359,6 @@ static int CPU_haveAltiVec(void)
355359
if (0 == error) {
356360
altivec = (hasVectorUnit != 0);
357361
}
358-
#elif defined(__FreeBSD__) && defined(__powerpc__)
359-
unsigned long cpufeatures = 0;
360-
elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures));
361-
altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC;
362-
return altivec;
363362
#elif defined(__LINUX__) && defined(__powerpc__) && defined(HAVE_GETAUXVAL)
364363
altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC;
365364
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
@@ -489,8 +488,6 @@ static int CPU_haveNEON(void)
489488
return 0; /* assume anything else from Apple doesn't have NEON. */
490489
#elif !defined(__arm__)
491490
return 0; /* not an ARM CPU at all. */
492-
#elif defined(__OpenBSD__)
493-
return 1; /* OpenBSD only supports ARMv7 CPUs that have NEON. */
494491
#elif defined(HAVE_ELF_AUX_INFO)
495492
unsigned long hasneon = 0;
496493
if (elf_aux_info(AT_HWCAP, (void *)&hasneon, (int)sizeof(hasneon)) != 0) {
@@ -527,6 +524,8 @@ static int CPU_haveNEON(void)
527524
}
528525
return 0;
529526
}
527+
#elif defined(__OpenBSD__)
528+
return 1; /* OpenBSD only supports ARMv7 CPUs that have NEON. */
530529
#else
531530
#warning SDL_HasNEON is not implemented for this ARM platform. Write me.
532531
return 0;

0 commit comments

Comments
 (0)