diff options
Diffstat (limited to 'simd/jsimd_powerpc.c')
-rw-r--r-- | simd/jsimd_powerpc.c | 24 |
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 */ |