The suffix "x" in intrinsics of type "_mm256_set1_epi64x"

In some functions, they use the suffix xlike _mm256_set1_epi64x. What is the meaning of this? For reference, _mm256_set1_epi32comes without this suffix.

+4
source share
1 answer

TL: DR: MMX-> SSE2 conversion indices took non-x names _mm_set/set1_epi64.

These are all guesses based on current function names, known history, and some compiler behavior:

The first Intel SIMD features were for MMX. __m64is the MMX equivalent of SSE2 __m128iand AVX2 __m256i. There were no 64-bit x86 processors at that time, so the widest setwas __m64 _mm_set_pi32 (int e1, int e0). According to the built-in finder, for movq mm0, raxdoes not exist. I think you can / should just drop int64_tin __m64. (Although the last time I experimented last year or so, gcc or clang (I forgot that) did a little work on optimizing the MMX asm. Support for the Aging compiler is another reason to avoid MMX for new projects.)

SSE2 2001 , AMD64/x86-64 Intel . ( , IA-64/Itanium x86). , , __m128i _mm_set1_epi64 (__m64 a) __m128i _mm_set1_epi64x (__int64 a), , . ( , __int64 int64_t <stdint.h>. 64- .)

epi Extended (?) Packed Integer. epi pi SSE, MMX. , , intrinsics , ( , , ). _mm_packs_epi32 (packssdw) _mm_unpackhi_epi16 (punpckhwd). PMOVZX , _mm_cvtepu8_epi32 (pmovzxbd), _mm_cvtepu8_epi64 (pmovzxbq ..


, , 64- 32- , Intel . IIRC, 64x 64- . 64x / 64- , x _mm_add_epi64 - .

64- _mm256_set1_epi64x , , 64x, 32x.

(, Godbolt, -m32. , asm int64_t __m64 _mm_set 32- .)

+3

Source: https://habr.com/ru/post/1681027/


All Articles