diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 09c01e9..97ea8e1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,24 @@ include(FetchContent) include(FindAVX) add_library(trigdx reference.cpp lookup.cpp) +if(HAVE_AVX2) + target_compile_definitions(trigdx PUBLIC HAVE_AVX2) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID STREQUAL + "IntelLLVM") + target_compile_options(trigdx PUBLIC -xCORE-AVX2) + else() + target_compile_options(trigdx PUBLIC -mavx2) + endif() +elseif(HAVE_AVX) + target_compile_definitions(trigdx PUBLIC HAVE_AVX) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID STREQUAL + "IntelLLVM") + target_compile_options(trigdx PUBLIC -xAVX) + else() + target_compile_options(trigdx PUBLIC -mavx) + endif() +endif() + target_include_directories(trigdx PUBLIC ${PROJECT_SOURCE_DIR}/include) if(HAVE_AVX) diff --git a/src/lookup_avx.cpp b/src/lookup_avx.cpp index 1effba7..b8debbb 100644 --- a/src/lookup_avx.cpp +++ b/src/lookup_avx.cpp @@ -6,6 +6,16 @@ #include "trigdx/lookup_avx.hpp" +#if defined(HAVE_AVX) && !defined(__AVX__) +static_assert(HAVE_AVX == 0, "__AVX__ should be defined when HAVE_AVX is " + "defined"); +#endif + +#if defined(HAVE_AVX2) && !defined(__AVX2__) +static_assert(HAVE_AVX2 == 0, "__AVX2__ should be defined when HAVE_AVX2 is " + "defined"); +#endif + template struct LookupAVXBackend::Impl { std::vector lookup; static constexpr std::size_t MASK = NR_SAMPLES - 1;