Merge commit 'baa94563fede8959a638b0fa132dd2124acd93e8'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 31 May 2015 19:57:07 +0000 (21:57 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 31 May 2015 19:57:07 +0000 (21:57 +0200)
* commit 'baa94563fede8959a638b0fa132dd2124acd93e8':
  ppc: linux: Check altivec using the auxv

Conflicts:
libavutil/ppc/cpu.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavutil/ppc/cpu.c

@@@ -62,7 -67,33 +67,33 @@@ int ff_get_cpu_flags_ppc(void
      if (err == 0)
          return has_vu ? AV_CPU_FLAG_ALTIVEC : 0;
      return 0;
 -#elif CONFIG_RUNTIME_CPUDETECT
+ #elif defined(__linux__)
+     // The linux kernel could have the altivec support disabled
+     // even if the cpu has it.
+     int i, ret = 0;
+     int fd = open("/proc/self/auxv", O_RDONLY);
+     unsigned long buf[64] = { 0 };
+     ssize_t count;
+     if (fd < 0)
+         return 0;
+     while ((count = read(fd, buf, sizeof(buf))) > 0) {
+         for (i = 0; i < count / sizeof(*buf); i += 2) {
+             if (buf[i] == AT_NULL)
+                 goto out;
+             if (buf[i] == AT_HWCAP) {
+                 if (buf[i + 1] & PPC_FEATURE_HAS_ALTIVEC)
+                     ret = AV_CPU_FLAG_ALTIVEC;
+                 goto out;
+             }
+         }
+     }
+ out:
+     close(fd);
+     return ret;
 +#elif CONFIG_RUNTIME_CPUDETECT && defined(__linux__) && !ARCH_PPC64
      int proc_ver;
      // Support of mfspr PVR emulation added in Linux 2.6.17.
      __asm__ volatile("mfspr %0, 287" : "=r" (proc_ver));