mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-03 08:28:29 +00:00
Use elf_aux_info() on OpenBSD
NFC for ARMv7. For PowerPC move elf_aux_info() to higher priority over sysctl for newer systems.
This commit is contained in:
@@ -38,13 +38,12 @@
|
|||||||
#endif
|
#endif
|
||||||
#if defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))
|
#if defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))
|
||||||
#include <sys/sysctl.h> // For AltiVec check
|
#include <sys/sysctl.h> // For AltiVec check
|
||||||
#elif defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__)
|
#elif defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__) && !defined(HAVE_ELF_AUX_INFO)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/sysctl.h> // For AltiVec check
|
#include <sys/sysctl.h> // For AltiVec check
|
||||||
#include <machine/cpu.h>
|
#include <machine/cpu.h>
|
||||||
#elif defined(SDL_PLATFORM_FREEBSD) && defined(__powerpc__)
|
#elif defined(SDL_PLATFORM_FREEBSD) && defined(__powerpc__) && defined(HAVE_ELF_AUX_INFO)
|
||||||
#include <machine/cpu.h>
|
#include <machine/cpu.h>
|
||||||
#include <sys/auxv.h>
|
|
||||||
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
|
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
@@ -331,7 +330,12 @@ static int CPU_haveAltiVec(void)
|
|||||||
{
|
{
|
||||||
volatile int altivec = 0;
|
volatile int altivec = 0;
|
||||||
#ifndef SDL_CPUINFO_DISABLED
|
#ifndef SDL_CPUINFO_DISABLED
|
||||||
#if (defined(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))) || (defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__))
|
#if (defined(SDL_PLATFORM_FREEBSD) || defined(SDL_PLATFORM_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(SDL_PLATFORM_MACOS) && (defined(__ppc__) || defined(__ppc64__))) || (defined(SDL_PLATFORM_OPENBSD) && defined(__powerpc__))
|
||||||
#ifdef SDL_PLATFORM_OPENBSD
|
#ifdef SDL_PLATFORM_OPENBSD
|
||||||
int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
|
int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
|
||||||
#else
|
#else
|
||||||
@@ -343,11 +347,6 @@ static int CPU_haveAltiVec(void)
|
|||||||
if (0 == error) {
|
if (0 == error) {
|
||||||
altivec = (hasVectorUnit != 0);
|
altivec = (hasVectorUnit != 0);
|
||||||
}
|
}
|
||||||
#elif defined(SDL_PLATFORM_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(SDL_PLATFORM_LINUX) && defined(__powerpc__) && defined(HAVE_GETAUXVAL)
|
#elif defined(SDL_PLATFORM_LINUX) && defined(__powerpc__) && defined(HAVE_GETAUXVAL)
|
||||||
altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC;
|
altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC;
|
||||||
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
|
#elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP)
|
||||||
@@ -483,8 +482,6 @@ static int CPU_haveNEON(void)
|
|||||||
return 0; // assume anything else from Apple doesn't have NEON.
|
return 0; // assume anything else from Apple doesn't have NEON.
|
||||||
#elif !defined(__arm__)
|
#elif !defined(__arm__)
|
||||||
return 0; // not an ARM CPU at all.
|
return 0; // not an ARM CPU at all.
|
||||||
#elif defined(SDL_PLATFORM_OPENBSD)
|
|
||||||
return 1; // OpenBSD only supports ARMv7 CPUs that have NEON.
|
|
||||||
#elif defined(HAVE_ELF_AUX_INFO)
|
#elif defined(HAVE_ELF_AUX_INFO)
|
||||||
unsigned long hasneon = 0;
|
unsigned long hasneon = 0;
|
||||||
if (elf_aux_info(AT_HWCAP, (void *)&hasneon, (int)sizeof(hasneon)) != 0) {
|
if (elf_aux_info(AT_HWCAP, (void *)&hasneon, (int)sizeof(hasneon)) != 0) {
|
||||||
@@ -519,6 +516,8 @@ static int CPU_haveNEON(void)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#elif defined(SDL_PLATFORM_OPENBSD)
|
||||||
|
return 1; // OpenBSD only supports ARMv7 CPUs that have NEON.
|
||||||
#elif defined(SDL_PLATFORM_EMSCRIPTEN)
|
#elif defined(SDL_PLATFORM_EMSCRIPTEN)
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user