| 
									
										
										
										
											2015-10-02 14:20:50 -03:00
										 |  |  | /* Copyright (c) 2010 Xiph.Org Foundation
 | 
					
						
							|  |  |  |  * Copyright (c) 2013 Parrot */ | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |    Redistribution and use in source and binary forms, with or without | 
					
						
							|  |  |  |    modification, are permitted provided that the following conditions | 
					
						
							|  |  |  |    are met: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    - Redistributions of source code must retain the above copyright | 
					
						
							|  |  |  |    notice, this list of conditions and the following disclaimer. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    - Redistributions in binary form must reproduce the above copyright | 
					
						
							|  |  |  |    notice, this list of conditions and the following disclaimer in the | 
					
						
							|  |  |  |    documentation and/or other materials provided with the distribution. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
					
						
							|  |  |  |    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
					
						
							|  |  |  |    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
					
						
							|  |  |  |    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER | 
					
						
							|  |  |  |    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 
					
						
							|  |  |  |    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 
					
						
							|  |  |  |    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 
					
						
							|  |  |  |    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 
					
						
							|  |  |  |    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 
					
						
							|  |  |  |    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
					
						
							|  |  |  |    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef CPU_SUPPORT_H
 | 
					
						
							|  |  |  | #define CPU_SUPPORT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-27 19:29:48 -02:00
										 |  |  | #include "opus/opus_types.h"
 | 
					
						
							|  |  |  | #include "opus/opus_defines.h"
 | 
					
						
							| 
									
										
										
										
											2015-10-02 14:20:50 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-01 12:48:46 -03:00
										 |  |  | #if defined(OPUS_HAVE_RTCD) && \
 | 
					
						
							|  |  |  |   (defined(OPUS_ARM_ASM) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR)) | 
					
						
							|  |  |  | #include "opus/celt/arm/armcpu.h"
 | 
					
						
							| 
									
										
										
										
											2015-10-02 14:20:50 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* We currently support 4 ARM variants:
 | 
					
						
							|  |  |  |  * arch[0] -> ARMv4 | 
					
						
							|  |  |  |  * arch[1] -> ARMv5E | 
					
						
							|  |  |  |  * arch[2] -> ARMv6 | 
					
						
							|  |  |  |  * arch[3] -> NEON | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define OPUS_ARCHMASK 3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-01 12:48:46 -03:00
										 |  |  | #elif (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(OPUS_X86_PRESUME_SSE)) || \
 | 
					
						
							|  |  |  |   (defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(OPUS_X86_PRESUME_SSE2)) || \ | 
					
						
							|  |  |  |   (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)) || \ | 
					
						
							|  |  |  |   (defined(OPUS_X86_MAY_HAVE_AVX) && !defined(OPUS_X86_PRESUME_AVX)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "opus/celt/x86/x86cpu.h"
 | 
					
						
							|  |  |  | /* We currently support 5 x86 variants:
 | 
					
						
							|  |  |  |  * arch[0] -> non-sse | 
					
						
							|  |  |  |  * arch[1] -> sse | 
					
						
							|  |  |  |  * arch[2] -> sse2 | 
					
						
							|  |  |  |  * arch[3] -> sse4.1 | 
					
						
							|  |  |  |  * arch[4] -> avx | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define OPUS_ARCHMASK 7
 | 
					
						
							|  |  |  | int opus_select_arch(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-02 14:20:50 -03:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #define OPUS_ARCHMASK 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static OPUS_INLINE int opus_select_arch(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 |