summaryrefslogtreecommitdiff
path: root/simd/jsimd_powerpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'simd/jsimd_powerpc.c')
-rw-r--r--simd/jsimd_powerpc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/simd/jsimd_powerpc.c b/simd/jsimd_powerpc.c
index 42dc1e0..47dd746 100644
--- a/simd/jsimd_powerpc.c
+++ b/simd/jsimd_powerpc.c
@@ -14,6 +14,11 @@
* PowerPC architecture.
*/
+#ifdef __amigaos4__
+/* This must be defined first as it re-defines GLOBAL otherwise */
+#include <proto/exec.h>
+#endif
+
#define JPEG_INTERNALS
#include "../jinclude.h"
#include "../jpeglib.h"
@@ -26,6 +31,12 @@
#include <string.h>
#include <ctype.h>
+#if defined(__OpenBSD__)
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <machine/cpu.h>
+#endif
+
static unsigned int simd_support = ~0;
#if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
@@ -101,6 +112,12 @@ init_simd (void)
char *env = NULL;
#if !defined(__ALTIVEC__) && (defined(__linux__) || defined(ANDROID) || defined(__ANDROID__))
int bufsize = 1024; /* an initial guess for the line buffer size limit */
+#elif defined(__amigaos4__)
+ uint32 altivec = 0;
+#elif defined(__OpenBSD__)
+ int mib[2] = { CTL_MACHDEP, CPU_ALTIVEC };
+ int altivec;
+ size_t len = sizeof(altivec);
#endif
if (simd_support != ~0U)
@@ -116,6 +133,13 @@ init_simd (void)
if (bufsize > SOMEWHAT_SANE_PROC_CPUINFO_SIZE_LIMIT)
break;
}
+#elif defined(__amigaos4__)
+ IExec->GetCPUInfoTags(GCIT_VectorUnit, &altivec, TAG_DONE);
+ if(altivec == VECTORTYPE_ALTIVEC)
+ simd_support |= JSIMD_ALTIVEC;
+#elif defined(__OpenBSD__)
+ if (sysctl(mib, 2, &altivec, &len, NULL, 0) == 0 && altivec != 0)
+ simd_support |= JSIMD_ALTIVEC;
#endif
/* Force different settings through environment variables */