Ignore:
Timestamp:
Nov 19, 2013, 1:51:24 PM (6 years ago)
Author:
cameron
Message:

Update configure scripts; add SSE4_2 library

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icXML/icXML-devel/configure.ac

    r2729 r3568  
    315315                 )
    316316
     317save_CXXFLAGS="$CXXFLAGS"
     318CXXFLAGS="$CXXFLAGS -std=gnu++0x"
     319AC_MSG_CHECKING([whether $CXX supports ISO C++ 2011 standard])
     320AC_COMPILE_IFELSE(  [AC_LANG_PROGRAM([[]], [[]])],
     321                    [AC_MSG_RESULT([yes])],
     322                    [AC_MSG_ERROR([C++0x support required])]
     323                                 )
     324
    317325if test "$have_sse2" = "yes"; then
    318     no_sse2_CXXFLAGS="$CXXFLAGS"
    319326
    320327    save_CXXFLAGS="$CXXFLAGS"
     328    no_sse_CXXFLAGS="$CXXFLAGS"
    321329    CXXFLAGS="$CXXFLAGS -msse2"
    322330        AC_MSG_CHECKING([whether we need to add -msse2])
     
    423431                                                  sse2_usable=yes
    424432                                                  AC_DEFINE_UNQUOTED([XERCES_HAVE_SSE2_INTRINSIC], 1, [Define to have SSE2 instruction used at runtime])
     433                          save_CXXFLAGS="$CXXFLAGS"
    425434                                                ],
    426435                                                [
    427436                                                  AC_MSG_RESULT([no])
    428                                                   sse2_usable=no
     437                                                  sse2_usable=no
    429438                                                ]
    430439
    431440                                         )
    432   # Restore original CXXFLAGS if SSE2 is not usable.
    433   #
    434   if test "$sse2_usable" = "no"; then
    435     CXXFLAGS="$no_sse2_CXXFLAGS"
    436   fi
     441   
     442    CXXFLAGS="$no_sse_CXXFLAGS -mavx -DUSE_SSE4_2"
     443
     444        AC_MSG_CHECKING([whether the compiler supports non-destructive SSE form])
     445        AC_COMPILE_IFELSE(  [AC_LANG_PROGRAM([[#include <immintrin.h>]],
     446                                                                                 [[    __m256* one=(__m256*)_mm_malloc(4, 32);
     447                                               __m256* two=(__m256*)_mm_malloc(4, 32);
     448                                               __m256 xmm1 = _mm256_load_ps((float*)one);
     449                                               __m256 xmm2 = _mm256_load_ps((float*)two);
     450                                               __m256 xmm3 = _mm256_or_ps(xmm1, xmm2);
     451                                               _mm256_store_ps((float*)one, xmm3);
     452                                               _mm_free(one);
     453                                               _mm_free(two);
     454                                                                                 ]])],
     455                                                [
     456                                                  AC_MSG_RESULT([yes])
     457                          save_CXXFLAGS="$CXXFLAGS"                                               
     458                                                ],
     459                                                [
     460                                                  AC_MSG_RESULT([no])
     461                          CXXFLAGS="$save_CXXFLAGS"
     462                                                ]
     463
     464                                         )
     465
     466    CXXFLAGS="$no_sse_CXXFLAGS -mavx2 -mbmi2 -fabi-version=6 -DUSE_AVX2 -DBLOCK_SIZE=256"
     467
     468        AC_MSG_CHECKING([whether the compiler supports AVX2 intrinsics])
     469        AC_COMPILE_IFELSE(  [AC_LANG_PROGRAM([[#include <immintrin.h>]],
     470                                                                                 [[    __m256i* one=(__m256i*)_mm_malloc(4, 32);
     471                                               __m256i* two=(__m256i*)_mm_malloc(4, 32);
     472                                               __m256i xmm1 = _mm256_load_si256(one);
     473                                               __m256i xmm2 = _mm256_load_si256(two);
     474                                               __m256i xmm3 = _mm256_or_si256(xmm1, xmm2);
     475                                               _mm256_store_si256(one, xmm3);
     476                                               _mm_free(one);
     477                                               _mm_free(two);
     478                                                                                 ]])],
     479                                                [
     480                                                  AC_MSG_RESULT([yes])                                           
     481                                                ],
     482                                                [
     483                                                  AC_MSG_RESULT([no])
     484                          CXXFLAGS="$save_CXXFLAGS"
     485                                                ]
     486
     487                                         )
     488fi
     489
     490# Raise a compile error if SSE2 is not usable.
     491#
     492if test "$sse2_usable" = "no"; then
     493    AC_MSG_ERROR([SSE2 support required])
    437494fi
    438495
Note: See TracChangeset for help on using the changeset viewer.