+++ /dev/null
-include(CheckCSourceRuns)
-
-set(AVX_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256 a;
- a = _mm256_set1_ps(0);
- return 0;
- }
-")
-
-set(AVX512_CODE "
- #include <immintrin.h>
- int main()
- {
- __m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0);
- __m512i b = a;
- __mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
- return 0;
- }
-")
-
-set(AVX2_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256i a = {0};
- a = _mm256_abs_epi16(a);
- __m256i x;
- _mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
- return 0;
- }
-")
-
-set(FMA_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256 acc = _mm256_setzero_ps();
- const __m256 d = _mm256_setzero_ps();
- const __m256 p = _mm256_setzero_ps();
- acc = _mm256_fmadd_ps( d, p, acc );
- return 0;
- }
-")
-
-macro(check_sse type flags)
- set(__FLAG_I 1)
- set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
- foreach (__FLAG ${flags})
- if (NOT ${type}_FOUND)
- set(CMAKE_REQUIRED_FLAGS ${__FLAG})
- check_c_source_runs("${${type}_CODE}" HAS_${type}_${__FLAG_I})
- if (HAS_${type}_${__FLAG_I})
- set(${type}_FOUND TRUE CACHE BOOL "${type} support")
- set(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
- endif()
- math(EXPR __FLAG_I "${__FLAG_I}+1")
- endif()
- endforeach()
- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
-
- if (NOT ${type}_FOUND)
- set(${type}_FOUND FALSE CACHE BOOL "${type} support")
- set(${type}_FLAGS "" CACHE STRING "${type} flags")
- endif()
-
- mark_as_advanced(${type}_FOUND ${type}_FLAGS)
-endmacro()
-
-# flags are for MSVC only!
-check_sse("AVX" " ;/arch:AVX")
-if (NOT ${AVX_FOUND})
- set(GGML_AVX OFF)
-else()
- set(GGML_AVX ON)
-endif()
-
-check_sse("AVX2" " ;/arch:AVX2")
-check_sse("FMA" " ;/arch:AVX2")
-if ((NOT ${AVX2_FOUND}) OR (NOT ${FMA_FOUND}))
- set(GGML_AVX2 OFF)
-else()
- set(GGML_AVX2 ON)
-endif()
-
-check_sse("AVX512" " ;/arch:AVX512")
-if (NOT ${AVX512_FOUND})
- set(GGML_AVX512 OFF)
-else()
- set(GGML_AVX512 ON)
-endif()