summaryrefslogtreecommitdiffstats
path: root/package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch')
-rw-r--r--package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch b/package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch
new file mode 100644
index 0000000000..0f61a27745
--- /dev/null
+++ b/package/openal/0002-Check-for-run-time-NEON-support-by-reading.patch
@@ -0,0 +1,67 @@
+From a52cfc804813aef8e4b304e20cf843fa6907af6c Mon Sep 17 00:00:00 2001
+From: Chris Robinson <chris.kcat@gmail.com>
+Date: Wed, 7 Sep 2016 09:57:40 -0700
+Subject: [PATCH] Check for run-time NEON support by reading /proc/cpuinfo
+
+Less than ideal since documentations warn it may not list 'neon' even if it's
+really supported. However, the "proper" APIs to check for NEON extensions don't
+seem to exist in my toolchain.
+
+[Upstream commit: https://github.com/kcat/openal-soft/commit/a52cfc804813aef8e4b304e20cf843fa6907afc6]
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Alc/helpers.c | 34 ++++++++++++++++++++++++++++++++--
+ 1 file changed, 32 insertions(+), 2 deletions(-)
+
+diff --git a/Alc/helpers.c b/Alc/helpers.c
+index 9b6c7894..4ffda46c 100644
+--- a/Alc/helpers.c
++++ b/Alc/helpers.c
+@@ -32,6 +32,7 @@
+ #include <time.h>
+ #include <errno.h>
+ #include <stdarg.h>
++#include <ctype.h>
+ #ifdef HAVE_MALLOC_H
+ #include <malloc.h>
+ #endif
+@@ -232,8 +233,37 @@ void FillCPUCaps(ALuint capfilter)
+ #endif
+ #endif
+ #ifdef HAVE_NEON
+- /* Assume Neon support if compiled with it */
+- caps |= CPU_CAP_NEON;
++ FILE *file = fopen("/proc/cpuinfo", "rt");
++ if(file)
++ ERR("Failed to open /proc/cpuinfo, cannot check for NEON support\n");
++ else
++ {
++ char buf[256];
++ while(fgets(buf, sizeof(buf), file) != NULL)
++ {
++ char *str;
++
++ if(strncmp(buf, "Features\t:", 10) != 0)
++ continue;
++
++ TRACE("Got features string:%s\n", buf+10);
++
++ str = buf;
++ while((str=strstr(str, "neon")) != NULL)
++ {
++ if(isspace(*(str-1)) && (str[4] == 0 || isspace(str[4])))
++ {
++ caps |= CPU_CAP_NEON;
++ break;
++ }
++ str++;
++ }
++ break;
++ }
++
++ fclose(file);
++ file = NULL;
++ }
+ #endif
+
+ TRACE("Extensions:%s%s%s%s%s%s\n",
OpenPOWER on IntegriCloud