diff options
author | Joerg Mayer <jmayer@loplof.de> | 2014-06-13 17:59:02 +0200 |
---|---|---|
committer | Jörg Mayer <jmayer@loplof.de> | 2014-06-14 06:44:15 +0000 |
commit | 935280317a88223312709e93d428e586a6cce9ef (patch) | |
tree | 954fac9628b29701a039b8f6e6cc70e69e24d6ae | |
parent | a4a7d2cfec9a1ac89a5d9c2ae130721fdc5bad9b (diff) | |
download | wireshark-935280317a88223312709e93d428e586a6cce9ef.tar.gz wireshark-935280317a88223312709e93d428e586a6cce9ef.tar.bz2 wireshark-935280317a88223312709e93d428e586a6cce9ef.zip |
Backport autofoo simd optimization
Change-Id: I5d58154bf8266eabedf550b54f18845612f514c6
Reviewed-on: https://code.wireshark.org/review/2206
Reviewed-by: Jörg Mayer <jmayer@loplof.de>
-rw-r--r-- | CMakeLists.txt | 31 | ||||
-rw-r--r-- | cmakeconfig.h.in | 3 | ||||
-rw-r--r-- | wsutil/CMakeLists.txt | 16 |
3 files changed, 49 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9be715ce7d..da74a2536f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -169,6 +169,8 @@ if( CMAKE_C_COMPILER_ID MATCHES "MSVC") # This avoids conflicts with the C++ standard library. /DNOMINMAX ) + set(WIRESHARK_SIMD_TESTS + ) if(NOT WIN64) set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/D_BIND_TO_CURRENT_CRT_VERSION=1") @@ -313,6 +315,18 @@ else() set(WIRESHARK_CPP_ONLY_FLAGS ${WIRESHARK_CPP_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_CPP_ONLY_FLAGS}) endif() + set(WIRESHARK_SIMD_TESTS + -faltivec + -mmmx + -msse + -msse2 + -msse3 + -mssse3 + -msse4.1 + -msse4.2 + -mavx + ) + add_definitions( -DG_DISABLE_DEPRECATED -DG_DISABLE_SINGLE_INCLUDES @@ -361,6 +375,23 @@ foreach(THIS_FLAG ${CPP_FLAG_TESTS}) endforeach() message(STATUS "C-Flags: ${CMAKE_C_FLAGS}\nCXX-Flags: ${CMAKE_CXX_FLAGS}") +foreach(THIS_FLAG ${WIRESHARK_SIMD_TESTS}) + string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} ) + set(${F} ${THIS_FLAG}) + set(V C_${F}_VALID) + message(STATUS "Checking for c-compiler SIMD flag: ${THIS_FLAG}") + check_c_compiler_flag(${${F}} ${V}) + if (${${V}}) + set(WIRESHARK_SIMD_FLAGS "${WIRESHARK_SIMD_FLAGS} ${${F}}") + endif() +endforeach() + +string(REGEX MATCH -msse4.2 + HAVE_SSE4_2 + ${WIRESHARK_SIMD_FLAGS} +) +message( STATUS "HAVE_SSE4_2: ${HAVE_SSE4_2}" ) + check_c_compiler_flag(-fvisibility=hidden FVHIDDEN) if(FVHIDDEN) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") diff --git a/cmakeconfig.h.in b/cmakeconfig.h.in index a809e77147..aa2acbc469 100644 --- a/cmakeconfig.h.in +++ b/cmakeconfig.h.in @@ -15,6 +15,9 @@ /* Directory for data */ #define DATAFILE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}" +/* Build wsutil with SIMD optimization */ +#cmakedefine HAVE_SSE4_2 1 + /* Path to Python. */ #cmakedefine PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}/python/${CPACK_PACKAGE_VERSION}" diff --git a/wsutil/CMakeLists.txt b/wsutil/CMakeLists.txt index c6090e6701..ab4dfd83cc 100644 --- a/wsutil/CMakeLists.txt +++ b/wsutil/CMakeLists.txt @@ -21,7 +21,7 @@ include(UseABICheck) -IF(WIN32) +if(WIN32) set(WSUTIL_PLATFORM_FILES file_util.c inet_aton.c @@ -32,6 +32,12 @@ IF(WIN32) ) ENDIF(WIN32) +if(HAVE_SSE4_2) + set( WSUTIL_SSE42_FILES + ws_mempbrk_sse42.c + ) +endif() + set(WSUTIL_FILES adler32.c aes.c @@ -76,6 +82,7 @@ set(WSUTIL_FILES nghttp2/nghttp2_hd_huffman_data.c nghttp2/nghttp2_helper.c ${WSUTIL_PLATFORM_FILES} + ${WSUTIL_SSE42_FILES} ) set(wsutil_LIBS @@ -99,6 +106,13 @@ if (WERROR) COMPILE_FLAGS -Werror ) endif() +if (HAVE_SSE4_2) + set_source_files_properties( + ${WSUTIL_SSE42_FILES} + PROPERTIES + COMPILE_FLAGS -msse4.2 + ) +endif() add_library(wsutil ${LINK_MODE_LIB} ${WSUTIL_FILES} |