51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
|   | --- third_party/webrtc/system_wrappers/source/cpu_features.cc.orig	2014-01-15 18:38:50.331954791 -0700
 | ||
|  | +++ third_party/webrtc/system_wrappers/source/cpu_features.cc	2014-01-15 18:38:37.902004379 -0700
 | ||
|  | @@ -18,6 +18,47 @@
 | ||
|  |   | ||
|  |  #include "webrtc/typedefs.h" | ||
|  |   | ||
|  | +#include <elf.h>
 | ||
|  | +#ifdef __arm__
 | ||
|  | +#include <fcntl.h>
 | ||
|  | +#include <unistd.h>
 | ||
|  | +#include <linux/auxvec.h>
 | ||
|  | +#include <asm/hwcap.h>
 | ||
|  | +#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; |