diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index ba079753729f..b9785d895366 100644 --- a/configure.ac +++ b/configure.ac @@ -6748,6 +6748,108 @@ fi AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED]) dnl =================================================================== +dnl CPU Intrinsincs support - SSE, AVX +dnl =================================================================== + +INTRINSICS_CXXFLAGS="" + +if test "$GCC" = "yes"; then + AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS -msse2" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + #include <x86intrin.h> + int main () { + volatile __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c; + c = _mm_xor_si128 (a, b); + return 0; + } + ])], + [can_compile_sse2=yes], + [can_compile_sse2=no]) + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS + AC_MSG_RESULT([${can_compile_sse2}]) + if test "${can_compile_sse2}" = "yes" ; then + INTRINSICS_CXXFLAGS="-msse2" + else + AC_MSG_WARN([cannot compile SSE2 intrinsics]) + fi + + AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS -mssse3" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + #include <x86intrin.h> + int main () { + volatile __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c; + c = _mm_maddubs_epi16 (a, b); + return 0; + } + ])], + [can_compile_ssse3=yes], + [can_compile_ssse3=no]) + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS + AC_MSG_RESULT([${can_compile_ssse3}]) + if test "${can_compile_ssse3}" = "yes" ; then + INTRINSICS_CXXFLAGS="-mssse3" + else + AC_MSG_WARN([cannot compile SSSE3 intrinsics]) + fi + + AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS -mavx" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + #include <x86intrin.h> + int main () { + volatile __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c; + c = _mm256_xor_ps(a, b); + return 0; + } + ])], + [can_compile_avx=yes], + [can_compile_avx=no]) + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS + AC_MSG_RESULT([${can_compile_avx}]) + if test "${can_compile_avx}" = "yes" ; then + INTRINSICS_CXXFLAGS="-mavx" + else + AC_MSG_WARN([cannot compile AVX intrinsics]) + fi + + AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS -mavx2" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + #include <x86intrin.h> + int main () { + volatile __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c; + c = _mm256_maddubs_epi16(a, b); + return 0; + } + ])], + [can_compile_avx2=yes], + [can_compile_avx2=no]) + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS + AC_MSG_RESULT([${can_compile_avx2}]) + if test "${can_compile_avx2}" = "yes" ; then + INTRINSICS_CXXFLAGS="-mavx2" + else + AC_MSG_WARN([cannot compile AVX2 intrinsics]) + fi +fi + +AC_SUBST([INTRINSICS_CXXFLAGS]) + +dnl =================================================================== dnl system stl sanity tests dnl =================================================================== if test "$_os" != "WINNT"; then |