Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
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.
- Loading branch information
Showing
with
11 additions
and
3 deletions.
-
+11
−3
src/cpuinfo/SDL_cpuinfo.c
|
@@ -28,6 +28,10 @@ |
|
|
|
|
|
#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> |
|
@@ -42,7 +46,7 @@ |
|
|
#define CPU_HAS_SSE2 0x00000080 |
|
|
#define CPU_HAS_ALTIVEC 0x00000100 |
|
|
|
|
|
#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! |
|
|
*/ |
|
@@ -359,8 +363,12 @@ static __inline__ int CPU_haveSSE2(void) |
|
|
static __inline__ int CPU_haveAltiVec(void) |
|
|
{ |
|
|
volatile int altivec = 0; |
|
|
#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__)) |
|
|
int selectors[2] = { CTL_HW, HW_VECTORUNIT }; |
|
|
#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); |
|
|