blob: 2b7ef1c9c312e3ea54dc990b2b2f902aadf9c57a [file] [log] [blame]
INCLUDE(CheckCSourceCompiles)
INCLUDE(CMakePushCheckState)
FUNCTION (CHECK_FUSION_PREREQUISITES)
MESSAGE(STATUS "Detecting fusion support")
CMAKE_PUSH_CHECK_STATE()
SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mavx2 -maes -mpclmul -mvaes -mvpclmulqdq")
CHECK_C_SOURCE_COMPILES("
#include <emmintrin.h>
#include <immintrin.h>
int main(void) {
__m256i ord0, ord1, ord2, ord3 = _mm256_setzero_si256();
ord0 = _mm256_aesenc_epi128(ord1, ord2);
ord3 = _mm256_aesenclast_epi128(ord0, ord1);
ord1 = _mm256_clmulepi64_epi128(ord3, ord2, 0x00);
_mm_insert_epi64(_mm_setr_epi32(0, 1, 2, 3), 0, 0);
return 0;
}
" CC_HAS_AESNI256)
CMAKE_POP_CHECK_STATE()
IF (CC_HAS_AESNI256)
MESSAGE(STATUS "Can use fusion")
SET(WITH_FUSION_DEFAULT "ON" PARENT_SCOPE)
ELSE ()
MESSAGE(STATUS "Cannot use fusion")
SET(WITH_FUSION_DEFAULT "OFF" PARENT_SCOPE)
ENDIF ()
ENDFUNCTION ()