Test more AVX-512F instructions before enabling support
authorErik Lindahl <erik@kth.se>
Fri, 24 Nov 2017 19:45:24 +0000 (20:45 +0100)
committerErik Lindahl <erik.lindahl@gmail.com>
Mon, 27 Nov 2017 19:21:15 +0000 (20:21 +0100)
Test instructions that are not implemented on
earlier versions of clang, and fix a bug where the
KNL version of the avx test was called by mistake due
to similar names.

Change-Id: I47bbaf363feac9f6b34276295508e147d0c9e3e8

cmake/gmxSimdFlags.cmake

index 441c65e6932c723427c775b37f82395ba994525f..bc55669bfe0aba6f66ff19fc6c821c788453de4e 100644 (file)
@@ -259,7 +259,12 @@ function(gmx_find_simd_avx_512_flags C_FLAGS_RESULT CXX_FLAGS_RESULT C_FLAGS_VAR
 
     gmx_find_flags(SIMD_AVX_512_C_FLAGS_RESULT SIMD_AVX_512_CXX_FLAGS_RESULT
         "#include<immintrin.h>
-         int main(){__m512 y,x=_mm512_set1_ps(0.5);y=_mm512_fmadd_ps(x,x,x);return (int)_mm512_cmp_ps_mask(x,y,_CMP_LT_OS);}"
+         int main(){__m512 y,x=_mm512_set1_ps(0.5);y=_mm512_fmadd_ps(x,x,x);
+          __m512i i = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
+          __mmask16 mask = static_cast<short>(0xffff);
+          i  = _mm512_maskz_permutexvar_epi32(mask, i, i);
+          int idata[16]; _mm512_storeu_si512(idata, i);
+          return idata[0]*static_cast<int>(_mm512_cmp_ps_mask(x,y,_CMP_LT_OS));}"
         TOOLCHAIN_C_FLAGS TOOLCHAIN_CXX_FLAGS
         SIMD_AVX_512_C_FLAGS SIMD_AVX_512_CXX_FLAGS
         "-xCORE-AVX512 -qopt-zmm-usage=high" "-xCORE-AVX512" "-mavx512f -mfma" "-mavx512f" "/arch:AVX" "-hgnu") # no AVX_512F flags known for MSVC yet. ICC should use ZMM if code anyhow uses ZMM
@@ -276,7 +281,7 @@ endfunction()
 
 
 # AVX-512ER (KNL)
-function(gmx_find_simd_avx_512_flags C_FLAGS_RESULT CXX_FLAGS_RESULT C_FLAGS_VARIABLE CXX_FLAGS_VARIABLE)
+function(gmx_find_simd_avx_512_knl_flags C_FLAGS_RESULT CXX_FLAGS_RESULT C_FLAGS_VARIABLE CXX_FLAGS_VARIABLE)
     find_x86_toolchain_flags(TOOLCHAIN_C_FLAGS TOOLCHAIN_CXX_FLAGS)
 
     gmx_find_flags(SIMD_AVX_512_KNL_C_FLAGS_RESULT SIMD_AVX_512_KNL_CXX_FLAGS_RESULT