diff -up chromium-52.0.2743.82/third_party/webrtc/system_wrappers/source/cpu_features.cc.armwebrtc chromium-52.0.2743.82/third_party/webrtc/system_wrappers/source/cpu_features.cc --- chromium-52.0.2743.82/third_party/webrtc/system_wrappers/source/cpu_features.cc.armwebrtc 2016-08-03 09:30:53.922861020 +0200 +++ chromium-52.0.2743.82/third_party/webrtc/system_wrappers/source/cpu_features.cc 2016-08-03 09:32:00.337498174 +0200 @@ -18,6 +18,47 @@ #include "webrtc/typedefs.h" +#include +#ifdef __arm__ +#include +#include +#include +#include +#endif + +#ifdef __arm__ +uint64_t WebRtc_GetCPUFeaturesARM() { + static bool detected = false; + static uint64_t have_neon = 0; + + int fd; + Elf32_auxv_t auxv; + unsigned int hwcaps; + + if (!detected) { + int fd; + Elf32_auxv_t auxv; + unsigned int hwcaps; + + fd = open("/proc/self/auxv", O_RDONLY); + if (fd >= 0) { + while (read(fd, &auxv, sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) { + if (auxv.a_type == AT_HWCAP) { + have_neon = (auxv.a_un.a_val & HWCAP_NEON) ? kCPUFeatureNEON : 0; + break; + } + } + close (fd); + } else { + have_neon = 0; + } + detected = true; + } + + return 0 | have_neon; // others here as we need them +} +#endif + // No CPU feature is available => straight C path. int GetCPUInfoNoASM(CPUFeature feature) { (void)feature;