Projects
Mega:23.03
libvisual
_service:tar_scm:libvisual-0.4.0-better-altivec...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:libvisual-0.4.0-better-altivec-detection.patch of Package libvisual
From 7f30ba9d44361296daef549fa049f579541ac5b1 Mon Sep 17 00:00:00 2001 From: licihua <licihua@huawei.com> Date: Thu, 29 Dec 2022 11:22:45 +0800 Subject: [PATCH 1/3] libvisual-0.4.0-better-altivec-detection --- libvisual/lv_cpu.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/libvisual/lv_cpu.c b/libvisual/lv_cpu.c index 4378396..f8cb502 100644 --- a/libvisual/lv_cpu.c +++ b/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( void ) 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 */ -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2