mirror of
				https://github.com/RangeNetworks/openbts.git
				synced 2025-11-04 05:43:14 +00:00 
			
		
		
		
	This large patch replaced the convolve() call with an SSE vector enabled version. The lower C and SSE intrinsic based code operates on fixed and aligned vectors for the filter taps. The storage format of interleaved I/Q for both complex and real vectors is maintained. SSE filter tap values must: 1. Start 16-byte aligned 2. Number with a multiple of 4 between 4 and 20 for real taps 3. Number with a multiple of 4 for complex taps Non-compliant values will fall back to non-SSE usage. Fixed length iterators mean that head and tail cases may require reallocation of the input vector, which is automatically handled by the upper C++ interface. Other calls are affected by these changes and adjusted or rewritten accordingly. The underlying algorithms, however, are unchanged. generateGSMPulse() analyzeTrafficBurst() detectRACHBurst() Intel SSE configuration is automatically detected and configured at build time with Autoconf macros. Signed-off-by: Thomas Tsou <tom@tsou.cc> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@6732 19bc5d8c-e614-43d4-8b26-e1612bc8e597
		
			
				
	
	
		
			31 lines
		
	
	
		
			719 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			719 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _CONVOLVE_H_
 | 
						|
#define _CONVOLVE_H_
 | 
						|
 | 
						|
void *convolve_h_alloc(int num);
 | 
						|
 | 
						|
int convolve_real(float *x, int x_len,
 | 
						|
		  float *h, int h_len,
 | 
						|
		  float *y, int y_len,
 | 
						|
		  int start, int len,
 | 
						|
		  int step, int offset);
 | 
						|
 | 
						|
int convolve_complex(float *x, int x_len,
 | 
						|
		     float *h, int h_len,
 | 
						|
		     float *y, int y_len,
 | 
						|
		     int start, int len,
 | 
						|
		     int step, int offset);
 | 
						|
 | 
						|
int base_convolve_real(float *x, int x_len,
 | 
						|
		       float *h, int h_len,
 | 
						|
		       float *y, int y_len,
 | 
						|
		       int start, int len,
 | 
						|
		       int step, int offset);
 | 
						|
 | 
						|
int base_convolve_complex(float *x, int x_len,
 | 
						|
			  float *h, int h_len,
 | 
						|
			  float *y, int y_len,
 | 
						|
			  int start, int len,
 | 
						|
			  int step, int offset);
 | 
						|
 | 
						|
#endif /* _CONVOLVE_H_ */
 |