From f1ec8a5f4ccb4bb15ca2af3ac5a003cc6f8b9194 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 11 Dec 2017 12:00:12 -0800 Subject: [PATCH] Check for immintrin.h before using it in SDL_cpuinfo.h --- CMakeLists.txt | 2 ++ configure | 14 ++++++++++++++ configure.in | 7 +++++++ include/SDL_config.h.cmake | 5 +++-- include/SDL_config.h.in | 5 +++-- include/SDL_cpuinfo.h | 18 +++++++++++++++++- 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfda8a1c23369..aa5cc0cc6c3c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -580,6 +580,8 @@ if(ASSEMBLY) endif() endif() + check_include_file("immintrin.h" HAVE_IMMINTRIN_H) + if(ALTIVEC) set(CMAKE_REQUIRED_FLAGS "-maltivec") check_c_source_compiles(" diff --git a/configure b/configure index 0cebb091651c4..ff5f7fc24f58b 100755 --- a/configure +++ b/configure @@ -17396,6 +17396,20 @@ $as_echo "$have_gcc_sse3" >&6; } fi fi + ac_fn_c_check_header_mongrel "$LINENO" "immintrin.h" "ac_cv_header_immintrin_h" "$ac_includes_default" +if test "x$ac_cv_header_immintrin_h" = xyes; then : + have_immintrin_h_hdr=yes +else + have_immintrin_h_hdr=no +fi + + + if test x$have_immintrin_h_hdr = xyes; then + +$as_echo "#define HAVE_IMMINTRIN_H 1" >>confdefs.h + + fi + # Check whether --enable-altivec was given. if test "${enable_altivec+set}" = set; then : enableval=$enable_altivec; diff --git a/configure.in b/configure.in index 839f2ec908c7a..fd0224c230e0b 100644 --- a/configure.in +++ b/configure.in @@ -670,6 +670,13 @@ AC_HELP_STRING([--enable-sse3], [use SSE3 assembly routines [[default=maybe]]]), fi fi + AC_CHECK_HEADER(immintrin.h, + have_immintrin_h_hdr=yes, + have_immintrin_h_hdr=no) + if test x$have_immintrin_h_hdr = xyes; then + AC_DEFINE(HAVE_IMMINTRIN_H, 1, [ ]) + fi + AC_ARG_ENABLE(altivec, AC_HELP_STRING([--enable-altivec], [use Altivec assembly routines [[default=yes]]]), , enable_altivec=yes) diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake index 7c2c0cac4046e..a55dcbdd4fd62 100644 --- a/include/SDL_config.h.cmake +++ b/include/SDL_config.h.cmake @@ -191,11 +191,12 @@ #endif /* HAVE_LIBC */ #cmakedefine HAVE_ALTIVEC_H 1 -#cmakedefine HAVE_LIBUDEV_H 1 #cmakedefine HAVE_DBUS_DBUS_H 1 -#cmakedefine HAVE_IBUS_IBUS_H 1 #cmakedefine HAVE_FCITX_FRONTEND_H 1 +#cmakedefine HAVE_IBUS_IBUS_H 1 +#cmakedefine HAVE_IMMINTRIN_H 1 #cmakedefine HAVE_LIBSAMPLERATE_H 1 +#cmakedefine HAVE_LIBUDEV_H 1 #cmakedefine HAVE_D3D_H @HAVE_D3D_H@ #cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@ diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in index 1cfcde44e8be5..71f746a53f190 100644 --- a/include/SDL_config.h.in +++ b/include/SDL_config.h.in @@ -193,11 +193,12 @@ #endif /* HAVE_LIBC */ #undef HAVE_ALTIVEC_H -#undef HAVE_LIBUDEV_H #undef HAVE_DBUS_DBUS_H -#undef HAVE_IBUS_IBUS_H #undef HAVE_FCITX_FRONTEND_H +#undef HAVE_IBUS_IBUS_H +#undef HAVE_IMMINTRIN_H #undef HAVE_LIBSAMPLERATE_H +#undef HAVE_LIBUDEV_H #undef HAVE_DDRAW_H #undef HAVE_DINPUT_H diff --git a/include/SDL_cpuinfo.h b/include/SDL_cpuinfo.h index 1fde4e614dd21..c7958a4eead73 100644 --- a/include/SDL_cpuinfo.h +++ b/include/SDL_cpuinfo.h @@ -59,10 +59,26 @@ #ifdef __3dNOW__ #include #endif -#if defined(__i386__) || defined(__x86_64__) +#if HAVE_IMMINTRIN_H #include +#else +#ifdef __MMX__ +#include +#endif +#ifdef __3dNOW__ +#include +#endif +#ifdef __SSE__ +#include +#endif +#ifdef __SSE2__ +#include #endif +#ifdef __SSE3__ +#include #endif +#endif /* HAVE_IMMINTRIN_H */ +#endif /* compiler version */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */