diff options
author | David Schleef <ds@schleef.org> | 2009-02-26 11:50:52 -0800 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2009-02-26 11:50:52 -0800 |
commit | 97c8828ad43fbbf2a40ee3fffcd59f90fb62945b (patch) | |
tree | 8d4b241bdf95faa47060c91a6ddbe6bc295f9a16 | |
parent | 77af7ee8900013d47c1568737625e156faf2f463 (diff) | |
download | liboil-97c8828ad43fbbf2a40ee3fffcd59f90fb62945b.tar.gz |
Add AltiVec detection support for OpenBSD
Fixes #17256. Patch from Brad Smith <brad@comstyle.com>
-rw-r--r-- | liboil/liboilcpu-powerpc.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/liboil/liboilcpu-powerpc.c b/liboil/liboilcpu-powerpc.c index 300ab1d..8bbc72d 100644 --- a/liboil/liboilcpu-powerpc.c +++ b/liboil/liboilcpu-powerpc.c @@ -59,6 +59,11 @@ #include <sys/sysctl.h> #endif +#if defined(__OpenBSD__) +#include <sys/param.h> +#include <sys/sysctl.h> +#include <machine/cpu.h> +#endif /***** powerpc *****/ @@ -70,7 +75,7 @@ oil_profile_stamp_tb(void) return ts; } -#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__APPLE__) && !defined(__linux__) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__linux__) static void test_altivec (void * ignored) { @@ -93,6 +98,24 @@ oil_check_altivec_sysctl_freebsd (void) } #endif +#if defined(__OpenBSD__) +static void +oil_check_altivec_sysctl_openbsd (void) +{ + int mib[2], av, ret; + size_t len; + + mib[0] = CTL_MACHDEP; + mib[1] = CPU_ALTIVEC; + + len = sizeof(av); + ret = sysctl(mib, 2, &av, &len, NULL, 0); + if (!ret && av) { + oil_cpu_flags |= OIL_IMPL_FLAG_ALTIVEC; + } +} +#endif + #if defined(__APPLE__) static void oil_check_altivec_sysctl_darwin (void) @@ -158,7 +181,7 @@ out: } #endif -#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__APPLE__) && !defined(__linux__) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__linux__) static void oil_check_altivec_fault (void) { @@ -176,6 +199,8 @@ oil_cpu_detect_arch(void) { #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) oil_check_altivec_sysctl_freebsd(); +#elif defined(__OpenBSD__) + oil_check_altivec_sysctl_openbsd(); #elif defined(__APPLE__) oil_check_altivec_sysctl_darwin(); #elif defined(__linux__) |