From d241616e412c9f33fbc4bffce8811aaab79313dd Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 13 Sep 2018 22:57:30 -0700 Subject: AVX512 test: an intrinsic that GCC forgot to implement prior to GCC8 _mm512_mask_cvtepi32_storeu_epi8 is VPMOVDB (convert from 32-bit to 8-bit with truncation) where the destination is a memory address, with an OpMask register used to indicate which of the lanes in the vector to store. Similarly, _mm512_mask_cvtepi16_storeu_epi8 is VPMOVWB (convert from 16-bit o 8-bit), which is useful for UTF-16 to Latin1 conversion. Change-Id: I8f261579aad648fdb4f0fffd15542ea306841ce6 Reviewed-by: Allan Sandfeld Jensen --- config.tests/avx512/avx512.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'config.tests/avx512/avx512.cpp') diff --git a/config.tests/avx512/avx512.cpp b/config.tests/avx512/avx512.cpp index 29e88ebf15..4d47db8463 100644 --- a/config.tests/avx512/avx512.cpp +++ b/config.tests/avx512/avx512.cpp @@ -65,6 +65,10 @@ int main(int, char**argv) d = _mm512_loadu_pd((double *)argv + 64); f = _mm512_loadu_ps((float *)argv + 128); + // some intrinsic that GCC forgot until GCC 8 + i = _mm512_maskz_set1_epi32(m, '?'); + _mm512_mask_cvtepi32_storeu_epi8(argv, m, i); + #ifdef WANT_AVX512ER /* AVX512 Exponential and Reciprocal */ f = _mm512_exp2a23_round_ps(f, 8); @@ -84,6 +88,7 @@ int main(int, char**argv) #ifdef WANT_AVX512BW /* AVX512 Byte and Word support */ i = _mm512_mask_loadu_epi8(i, m, argv - 8); + _mm512_mask_cvtepi16_storeu_epi8(argv + 8, m, i); #endif #ifdef WANT_AVX512VL /* AVX512 Vector Length */ -- cgit v1.2.3