diff --git a/celt/x86/x86cpu.c b/celt/x86/x86cpu.c index 76bfd6c7901e94fd8c98ed667a794b72c9936925..f850715e13b2841c8b0ec1bcc5e2bd53668e10d7 100644 --- a/celt/x86/x86cpu.c +++ b/celt/x86/x86cpu.c @@ -43,7 +43,11 @@ #if defined(_MSC_VER) #include <intrin.h> -#define cpuid(info,x) __cpuid(info,x) +static _inline void cpuid(unsigned int CPUInfo[4], unsigned int InfoType) +{ + __cpuid((int*)CPUInfo, InfoType); +} + #else #if defined(CPU_INFO_BY_C) diff --git a/win32/VS2010/celt.vcxproj b/win32/VS2010/celt.vcxproj index f107fec02b1ee69595916674e40c65d00bcd6b4e..958d6a99da3d7f5489ea70bb04f4cbc98c927c96 100644 --- a/win32/VS2010/celt.vcxproj +++ b/win32/VS2010/celt.vcxproj @@ -37,6 +37,12 @@ <ClCompile Include="..\..\celt\quant_bands.c" /> <ClCompile Include="..\..\celt\rate.c" /> <ClCompile Include="..\..\celt\vq.c" /> + <ClCompile Include="..\..\celt\x86\celt_lpc_sse.c" /> + <ClCompile Include="..\..\celt\x86\pitch_sse.c" /> + <ClCompile Include="..\..\celt\x86\pitch_sse2.c" /> + <ClCompile Include="..\..\celt\x86\pitch_sse4_1.c" /> + <ClCompile Include="..\..\celt\x86\x86cpu.c" /> + <ClCompile Include="..\..\celt\x86\x86_celt_map.c" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\celt\arch.h" /> @@ -67,6 +73,9 @@ <ClInclude Include="..\..\celt\static_modes_fixed.h" /> <ClInclude Include="..\..\celt\static_modes_float.h" /> <ClInclude Include="..\..\celt\vq.h" /> + <ClInclude Include="..\..\celt\x86\celt_lpc_sse.h" /> + <ClInclude Include="..\..\celt\x86\pitch_sse.h" /> + <ClInclude Include="..\..\celt\x86\x86cpu.h" /> <ClInclude Include="..\..\celt\_kiss_fft_guts.h" /> </ItemGroup> <PropertyGroup Label="Globals"> @@ -141,7 +150,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>..\;..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\;..\..\include;..\..\celt;..\..\silk;..\..\silk\float;..\..\silk\fixed;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -168,7 +177,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>..\;..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\;..\..\include;..\..\celt;..\..\silk;..\..\silk\float;..\..\silk\fixed;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -196,7 +205,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>..\;..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\;..\..\include;..\..\celt;..\..\silk;..\..\silk\float;..\..\silk\fixed;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -227,7 +236,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>..\;..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\;..\..\include;..\..\celt;..\..\silk;..\..\silk\float;..\..\silk\fixed;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> diff --git a/win32/VS2010/celt.vcxproj.filters b/win32/VS2010/celt.vcxproj.filters index e3a1d977930fdd88b215826b8f330829b5e524a7..e9948faac731b6c75cdc0d7cf0030558a4986b35 100644 --- a/win32/VS2010/celt.vcxproj.filters +++ b/win32/VS2010/celt.vcxproj.filters @@ -69,6 +69,24 @@ <ClCompile Include="..\..\celt\celt.c"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\celt\x86\celt_lpc_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\celt\x86\pitch_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\celt\x86\pitch_sse2.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\celt\x86\pitch_sse4_1.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\celt\x86\x86_celt_map.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\celt\x86\x86cpu.c"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\celt\cwrs.h"> @@ -158,5 +176,14 @@ <ClInclude Include="..\..\celt\celt_lpc.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="..\..\celt\x86\celt_lpc_sse.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\celt\x86\pitch_sse.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\celt\x86\x86cpu.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> </Project> \ No newline at end of file diff --git a/win32/VS2010/silk_common.vcxproj b/win32/VS2010/silk_common.vcxproj index 9cf5f48784a0e343024a3dad7c1da8b7245b04c2..1bf2b20fa8e32efa54e2a6c60313908797bda8ce 100644 --- a/win32/VS2010/silk_common.vcxproj +++ b/win32/VS2010/silk_common.vcxproj @@ -88,7 +88,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk/float;../../win32;../../celt;../../include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk/float;../../silk;../../win32;../../celt;../../include</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -118,7 +118,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk/float;../../win32;../../celt;../../include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk/float;../../silk;../../win32;../../celt;../../include</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -149,7 +149,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk/float;../../win32;../../celt;../../include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk/float;../../silk;../../win32;../../celt;../../include</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> </ClCompile> @@ -184,7 +184,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk/float;../../win32;../../celt;../../include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk/float;../../silk;../../win32;../../celt;../../include</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> </ClCompile> @@ -212,6 +212,8 @@ </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="..\..\include\opus_types.h" /> + <ClInclude Include="..\..\silk\x86\main_sse.h" /> + <ClInclude Include="..\..\silk\x86\SigProc_FIX_sse.h" /> <ClInclude Include="..\..\win32\config.h" /> <ClInclude Include="..\..\silk\control.h" /> <ClInclude Include="..\..\silk\debug.h" /> @@ -311,6 +313,11 @@ <ClCompile Include="..\..\silk\table_LSF_cos.c" /> <ClCompile Include="..\..\silk\VAD.c" /> <ClCompile Include="..\..\silk\VQ_WMat_EC.c" /> + <ClCompile Include="..\..\silk\x86\NSQ_del_dec_sse.c" /> + <ClCompile Include="..\..\silk\x86\NSQ_sse.c" /> + <ClCompile Include="..\..\silk\x86\VAD_sse.c" /> + <ClCompile Include="..\..\silk\x86\VQ_WMat_EC_sse.c" /> + <ClCompile Include="..\..\silk\x86\x86_silk_map.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/win32/VS2010/silk_common.vcxproj.filters b/win32/VS2010/silk_common.vcxproj.filters index 30db48e000566d286f56d9dcb4f0843ee8a58626..c41064e7bfd9ae4744d249501f982852553de17e 100644 --- a/win32/VS2010/silk_common.vcxproj.filters +++ b/win32/VS2010/silk_common.vcxproj.filters @@ -81,6 +81,12 @@ <ClInclude Include="..\..\silk\typedef.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="..\..\silk\x86\main_sse.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\silk\x86\SigProc_FIX_sse.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\silk\VQ_WMat_EC.c"> @@ -311,5 +317,20 @@ <ClCompile Include="..\..\silk\VAD.c"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\silk\x86\NSQ_del_dec_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\x86\NSQ_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\x86\VAD_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\x86\VQ_WMat_EC_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\x86\x86_silk_map.c"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> </Project> diff --git a/win32/VS2010/silk_fixed.vcxproj b/win32/VS2010/silk_fixed.vcxproj index 5ea1a913b0ac5f6cff5e5a28f4450135afc6f6dd..1d01a33658a4cbe16099e029489b4906fd8bef77 100644 --- a/win32/VS2010/silk_fixed.vcxproj +++ b/win32/VS2010/silk_fixed.vcxproj @@ -86,7 +86,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -104,7 +104,7 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> @@ -123,7 +123,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -145,7 +145,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>HAVE_CONFIG_H;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;../../silk/fixed;../../silk;../../win32;../../celt;../../include;../win32</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <Link> @@ -191,6 +191,9 @@ <ClCompile Include="..\..\silk\fixed\solve_LS_FIX.c" /> <ClCompile Include="..\..\silk\fixed\vector_ops_FIX.c" /> <ClCompile Include="..\..\silk\fixed\warped_autocorrelation_FIX.c" /> + <ClCompile Include="..\..\silk\fixed\x86\burg_modified_FIX_sse.c" /> + <ClCompile Include="..\..\silk\fixed\x86\prefilter_FIX_sse.c" /> + <ClCompile Include="..\..\silk\fixed\x86\vector_ops_FIX_sse.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/win32/VS2010/silk_fixed.vcxproj.filters b/win32/VS2010/silk_fixed.vcxproj.filters index 689793036be4fa857b734577d2e3da74c3d01c23..c2327ebf56be8e0e8f87a5d51c4fe4169c49d452 100644 --- a/win32/VS2010/silk_fixed.vcxproj.filters +++ b/win32/VS2010/silk_fixed.vcxproj.filters @@ -18,16 +18,16 @@ <ClInclude Include="..\..\win32\config.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="main_FIX.h"> + <ClInclude Include="..\..\include\opus_types.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\SigProc_FIX.h"> + <ClInclude Include="..\..\silk\SigProc_FIX.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="structs_FIX.h"> + <ClInclude Include="..\..\silk\fixed\main_FIX.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\..\include\opus_types.h"> + <ClInclude Include="..\..\silk\fixed\structs_FIX.h"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> @@ -107,5 +107,14 @@ <ClCompile Include="..\..\silk\fixed\LTP_analysis_filter_FIX.c"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\silk\fixed\x86\burg_modified_FIX_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\fixed\x86\prefilter_FIX_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\silk\fixed\x86\vector_ops_FIX_sse.c"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> </Project> \ No newline at end of file diff --git a/win32/config.h b/win32/config.h index 46ff699b256345556e9a4146de97cd9b306c15e2..3e54bcbbec093c60a1429736baf1ef51b82bffc3 100644 --- a/win32/config.h +++ b/win32/config.h @@ -35,9 +35,28 @@ POSSIBILITY OF SUCH DAMAGE. #define OPUS_BUILD 1 -/* Enable SSE functions, if compiled with SSE/SSE2 (note that AMD64 implies SSE2) */ -#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) -#define __SSE__ 1 +#if defined(_M_IX86) || defined(_M_X64) +/* Can always compile SSE intrinsics (no special compiler flags necessary) */ +#define OPUS_X86_MAY_HAVE_SSE +#define OPUS_X86_MAY_HAVE_SSE2 +#define OPUS_X86_MAY_HAVE_SSE4_1 + +/* Presume SSE functions, if compiled to use SSE/SSE2/AVX (note that AMD64 implies SSE2, and AVX + implies SSE4.1) */ +#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || defined(__AVX__) +#define OPUS_X86_PRESUME_SSE 1 +#endif +#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(__AVX__) +#define OPUS_X86_PRESUME_SSE2 1 +#endif +#if defined(__AVX__) +#define OPUS_X86_PRESUME_SSE4_1 1 +#endif + +#if !defined(OPUS_X86_PRESUME_SSE4_1) || !defined(OPUS_X86_PRESUME_SSE2) || !defined(OPUS_X86_PRESUME_SSE) +#define OPUS_HAVE_RTCD 1 +#endif + #endif #include "version.h"