diff --git a/src/dsp/cpu.c b/src/dsp/cpu.c index 9ac490e0..73e750a3 100644 --- a/src/dsp/cpu.c +++ b/src/dsp/cpu.c @@ -37,11 +37,11 @@ static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) { : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) : "a"(info_type)); } -#elif defined(_MSC_VER) // Visual C++ +#elif defined(WEBP_MSC_SSE2) #define GetCPUInfo __cpuid #endif -#if defined(__i386__) || defined(__x86_64__) || defined(_MSC_VER) +#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2) static int x86CPUInfo(CPUFeature feature) { int cpu_info[4]; GetCPUInfo(cpu_info, 1); diff --git a/src/dsp/dec.c b/src/dsp/dec.c index 27c6f13f..3138bed3 100644 --- a/src/dsp/dec.c +++ b/src/dsp/dec.c @@ -715,7 +715,7 @@ void VP8DspInit(void) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo) { -#if defined(__SSE2__) || defined(_MSC_VER) +#if defined(WEBP_USE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8DspInitSSE2(); } diff --git a/src/dsp/dec_sse2.c b/src/dsp/dec_sse2.c index d130a0af..09b0eced 100644 --- a/src/dsp/dec_sse2.c +++ b/src/dsp/dec_sse2.c @@ -10,7 +10,9 @@ // Author: somnath@google.com (Somnath Banerjee) // cduvivier@google.com (Christian Duvivier) -#if defined(__SSE2__) || defined(_MSC_VER) +#include "./dsp.h" + +#if defined(WEBP_USE_SSE2) #include #include "../dec/vp8i.h" @@ -898,4 +900,4 @@ void VP8DspInitSSE2(void) { } // extern "C" #endif -#endif //__SSE2__ || _MSC_VER +#endif // WEBP_USE_SSE2 diff --git a/src/dsp/dsp.h b/src/dsp/dsp.h index 725a2c8e..bf5c8387 100644 --- a/src/dsp/dsp.h +++ b/src/dsp/dsp.h @@ -21,6 +21,14 @@ extern "C" { //------------------------------------------------------------------------------ // CPU detection +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) +#define WEBP_MSC_SSE2 // Visual C++ SSE2 targets +#endif + +#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) +#define WEBP_USE_SSE2 +#endif + typedef enum { kSSE2, kSSE3, diff --git a/src/dsp/enc.c b/src/dsp/enc.c index 6321c8e1..9ff4b4a7 100644 --- a/src/dsp/enc.c +++ b/src/dsp/enc.c @@ -9,6 +9,7 @@ // // Author: Skal (pascal.massimino@gmail.com) +#include "./dsp.h" #include "../enc/vp8enci.h" #if defined(__cplusplus) || defined(c_plusplus) @@ -734,7 +735,7 @@ void VP8EncDspInit(void) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo) { -#if defined(__SSE2__) || defined(_MSC_VER) +#if defined(WEBP_USE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8EncDspInitSSE2(); } diff --git a/src/dsp/enc_sse2.c b/src/dsp/enc_sse2.c index fac80008..21442aa0 100644 --- a/src/dsp/enc_sse2.c +++ b/src/dsp/enc_sse2.c @@ -9,7 +9,9 @@ // // Author: Christian Duvivier (cduvivier@google.com) -#if defined(__SSE2__) || defined(_MSC_VER) +#include "./dsp.h" + +#if defined(WEBP_USE_SSE2) #include #include "../enc/vp8enci.h" @@ -831,4 +833,4 @@ void VP8EncDspInitSSE2(void) { } // extern "C" #endif -#endif //__SSE2__ +#endif // WEBP_USE_SSE2 diff --git a/src/dsp/upsampling.c b/src/dsp/upsampling.c index b44b6441..a37a7607 100644 --- a/src/dsp/upsampling.c +++ b/src/dsp/upsampling.c @@ -227,7 +227,7 @@ void WebPInitUpsamplers(void) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo) { -#if defined(__SSE2__) || defined(_MSC_VER) +#if defined(WEBP_USE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitUpsamplersSSE2(); } diff --git a/src/dsp/upsampling_sse2.c b/src/dsp/upsampling_sse2.c index 30eb6a96..f8901815 100644 --- a/src/dsp/upsampling_sse2.c +++ b/src/dsp/upsampling_sse2.c @@ -9,12 +9,13 @@ // // Author: somnath@google.com (Somnath Banerjee) -#if defined(__SSE2__) || defined(_MSC_VER) +#include "./dsp.h" + +#if defined(WEBP_USE_SSE2) #include #include #include -#include "./dsp.h" #include "./yuv.h" #include "../dec/webpi.h" @@ -212,4 +213,4 @@ void WebPInitUpsamplersSSE2(void) { } // extern "C" #endif -#endif //__SSE2__ || _MSC_VER +#endif // WEBP_USE_SSE2