diff options
Diffstat (limited to 'media-libs/libvisual/files/libvisual-0.4.0-better-altivec-detection.patch')
-rw-r--r-- | media-libs/libvisual/files/libvisual-0.4.0-better-altivec-detection.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/media-libs/libvisual/files/libvisual-0.4.0-better-altivec-detection.patch b/media-libs/libvisual/files/libvisual-0.4.0-better-altivec-detection.patch new file mode 100644 index 000000000000..19aa579aa110 --- /dev/null +++ b/media-libs/libvisual/files/libvisual-0.4.0-better-altivec-detection.patch @@ -0,0 +1,71 @@ +http://pkgs.fedoraproject.org/gitweb/?p=libvisual.git;a=tree + +--- libvisual/lv_cpu.c ++++ libvisual/lv_cpu.c +@@ -50,8 +50,19 @@ + #endif + + #if defined(VISUAL_OS_LINUX) ++#if defined(VISUAL_ARCH_POWERPC) ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <fcntl.h> ++#include <unistd.h> ++#include <stdio.h> ++ ++#include <linux/auxvec.h> ++#include <asm/cputable.h> ++#else /* VISUAL_ARCH_POWERPC */ + #include <signal.h> + #endif ++#endif + + #if defined(VISUAL_OS_WIN32) + #include <windows.h> +@@ -154,6 +165,46 @@ static void check_os_altivec_support( vo + if (err == 0) + if (has_vu != 0) + __lv_cpu_caps.hasAltiVec = 1; ++#elif defined (VISUAL_OS_LINUX) ++ static int available = -1; ++ int new_avail = 0; ++ char fname[64]; ++ unsigned long buf[64]; ++ ssize_t count; ++ pid_t pid; ++ int fd, i; ++ ++ if (available != -1) ++ return; ++ ++ pid = getpid(); ++ snprintf(fname, sizeof(fname)-1, "/proc/%d/auxv", pid); ++ ++ fd = open(fname, O_RDONLY); ++ if (fd < 0) ++ goto out; ++more: ++ count = read(fd, buf, sizeof(buf)); ++ if (count < 0) ++ goto out_close; ++ ++ for (i=0; i < (count / sizeof(unsigned long)); i += 2) { ++ if (buf[i] == AT_HWCAP) { ++ new_avail = !!(buf[i+1] & PPC_FEATURE_HAS_ALTIVEC); ++ goto out_close; ++ } else if (buf[i] == AT_NULL) { ++ goto out_close; ++ } ++ } ++ ++ if (count == sizeof(buf)) ++ goto more; ++out_close: ++ close(fd); ++out: ++ available = new_avail; ++ if (available) ++ __lv_cpu_caps.hasAltiVec = 1; + #else /* !VISUAL_OS_DARWIN */ + /* no Darwin, do it the brute-force way */ + /* this is borrowed from the libmpeg2 library */ |