Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SSE intrinsics:如何将值存储到寄存器?_C++_Sse_Intrinsics - Fatal编程技术网

C++ SSE intrinsics:如何将值存储到寄存器?

C++ SSE intrinsics:如何将值存储到寄存器?,c++,sse,intrinsics,C++,Sse,Intrinsics,我对SSE intrinsics非常陌生,有一个小问题。我需要帮助将整数值加载到_m128i 以下是我已经拥有的: __m128i a = _mm_set_epi16( 1, 1, 2, 2, 3, 3, 4, 4 ); __m128i b = _mm_set_epi16( 5, 5, 6, 6, 7, 7, 8, 8 ); //some magic __m128i c // = (1,2,3,4,5,6,7,8); 如果不想动态加载值,则可以使用set Intrinsic: e、 g: 我

我对SSE intrinsics非常陌生,有一个小问题。我需要帮助将整数值加载到_m128i

以下是我已经拥有的:

__m128i a = _mm_set_epi16( 1, 1, 2, 2, 3, 3, 4, 4 );
__m128i b = _mm_set_epi16( 5, 5, 6, 6, 7, 7, 8, 8 );

//some magic
__m128i c // = (1,2,3,4,5,6,7,8);

如果不想动态加载值,则可以使用set Intrinsic:

e、 g:


我自己找到了解决办法

__m128i a = _mm_set_epi16( 1, 1, 2, 2, 3, 3, 4, 4 );
__m128i b = _mm_set_epi16( 5, 5, 6, 6, 7, 7, 8, 8 );

//some magic
__m128i mmShufflerVo = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, 13, 12, 9, 8,5, 4,1, 0);
__m128i mmShufflerHi = _mm_set_epi8(13, 12, 9, 8, 5, 4, 1, 0, -1, -1, -1, 
                                          -1, -1, -1, -1, -1);

__m128i mmResult0_3 = _mm_shuffle_epi8(mmResult0_3, mmShufflerVo);

__m128i mmResult4_7 = _mm_shuffle_epi8(mmResult4_7, mmShufflerHi);


__m128i c = _mm_or_si128(mmResult0_3, mmResult4_7);

去阅读一些链接,尤其是Agner Fog的指南。谢谢,这很有帮助
__m128i a = _mm_set_epi16( 1, 1, 2, 2, 3, 3, 4, 4 );
__m128i b = _mm_set_epi16( 5, 5, 6, 6, 7, 7, 8, 8 );

//some magic
__m128i mmShufflerVo = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, 13, 12, 9, 8,5, 4,1, 0);
__m128i mmShufflerHi = _mm_set_epi8(13, 12, 9, 8, 5, 4, 1, 0, -1, -1, -1, 
                                          -1, -1, -1, -1, -1);

__m128i mmResult0_3 = _mm_shuffle_epi8(mmResult0_3, mmShufflerVo);

__m128i mmResult4_7 = _mm_shuffle_epi8(mmResult4_7, mmShufflerHi);


__m128i c = _mm_or_si128(mmResult0_3, mmResult4_7);