Fixed bug 1434 - Add AltiVec detection for OpenBSD/powerpc
authorSam Lantinga <slouken@libsdl.org>
Wed, 18 Jul 2012 13:06:38 -0700
changeset 6363 8506dd64e859
parent 6362 562a9fe60603
child 6365 975e23e06124
Fixed bug 1434 - Add AltiVec detection for OpenBSD/powerpc Brad Smith 2012-02-29 19:31:46 PST The attached patch adds AltiVec detection for OpenBSD/powerpc. Please apply the patch to both 2.0 and 1.2.
src/cpuinfo/SDL_cpuinfo.c
--- a/src/cpuinfo/SDL_cpuinfo.c	Wed Jul 18 10:47:41 2012 -0700
+++ b/src/cpuinfo/SDL_cpuinfo.c	Wed Jul 18 13:06:38 2012 -0700
@@ -33,6 +33,10 @@
 #endif
 #if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
 #include <sys/sysctl.h>         /* For AltiVec check */
+#elif defined(__OpenBSD__) && defined(__powerpc__)
+#include <sys/param.h>
+#include <sys/sysctl.h> /* For AltiVec check */
+#include <machine/cpu.h>
 #elif SDL_ALTIVEC_BLITTERS && HAVE_SETJMP
 #include <signal.h>
 #include <setjmp.h>
@@ -51,7 +55,7 @@
 #define CPU_HAS_SSE41   0x00000100
 #define CPU_HAS_SSE42   0x00000200
 
-#if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__
+#if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__ && !__OpenBSD__
 /* This is the brute force way of detecting instruction sets...
    the idea is borrowed from the libmpeg2 library - thanks!
  */
@@ -214,8 +218,12 @@
 CPU_haveAltiVec(void)
 {
     volatile int altivec = 0;
-#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
+#if (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__))
+#ifdef __OpenBSD__
+    int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
+#else
     int selectors[2] = { CTL_HW, HW_VECTORUNIT };
+#endif
     int hasVectorUnit = 0;
     size_t length = sizeof(hasVectorUnit);
     int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0);