diff --git a/src/libImaging/ImPlatform.h b/src/libImaging/ImPlatform.h index e7feff9b5..a122fea21 100644 --- a/src/libImaging/ImPlatform.h +++ b/src/libImaging/ImPlatform.h @@ -9,19 +9,6 @@ #include "Python.h" -/* Microsoft compiler doesn't limit intrinsics for an architecture. - This macro is set only on x86 and means SSE2 and above including AVX2. */ -#if defined(_M_X64) || _M_IX86_FP == 2 - #define __SSE4_2__ -#endif -#if defined(__SSE4_2__) - #include - #include - #include -#endif -#if defined(__AVX2__) - #include -#endif /* Check that we have an ANSI compliant compiler */ #ifndef HAVE_PROTOTYPES @@ -98,3 +85,5 @@ typedef signed __int64 int64_t; #ifdef __GNUC__ #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #endif + +#include "ImagingSIMD.h" diff --git a/src/libImaging/ImagingSIMD.h b/src/libImaging/ImagingSIMD.h new file mode 100644 index 000000000..d082837d1 --- /dev/null +++ b/src/libImaging/ImagingSIMD.h @@ -0,0 +1,27 @@ +/* Microsoft compiler doesn't limit intrinsics for an architecture. + This macro is set only on x86 and means SSE2 and above including AVX2. */ +#if defined(_M_X64) || _M_IX86_FP == 2 + #define __SSE4_2__ +#endif +#if defined(__SSE4_2__) + #include + #include + #include +#endif +#if defined(__AVX2__) + #include +#endif + +#if defined(__SSE4_2__) +static __m128i inline +mm_cvtepu8_epi32(void *ptr) { + return _mm_cvtepu8_epi32(_mm_cvtsi32_si128(*(INT32 *) ptr)); +} +#endif + +#if defined(__AVX2__) +static __m256i inline +mm256_cvtepu8_epi32(void *ptr) { + return _mm256_cvtepu8_epi32(_mm_loadl_epi64((__m128i *) ptr)); +} +#endif diff --git a/src/libImaging/ImagingUtils.h b/src/libImaging/ImagingUtils.h index ba6210886..0c0c1eda9 100644 --- a/src/libImaging/ImagingUtils.h +++ b/src/libImaging/ImagingUtils.h @@ -40,18 +40,3 @@ static float __attribute__((always_inline)) inline _i2f(int v) { #else static float inline _i2f(int v) { return (float)v; } #endif - - -#if defined(__SSE4_2__) -static __m128i inline -mm_cvtepu8_epi32(void *ptr) { - return _mm_cvtepu8_epi32(_mm_cvtsi32_si128(*(INT32 *) ptr)); -} -#endif - -#if defined(__AVX2__) -static __m256i inline -mm256_cvtepu8_epi32(void *ptr) { - return _mm256_cvtepu8_epi32(_mm_loadl_epi64((__m128i *) ptr)); -} -#endif