SSE 系列内置函数中的 shuffle 函数
邮箱: quarrying@qq.com
博客: http://www.cnblogs.com/quarryman/
发布时间: 2017年04月18日
版权声明: 自由分享, 保持署名-非商业用途-非衍生, 知识共享3.0协议。
水平有限, 欢迎大家批评指正!
这份博文总结了 SSE 系列内置函数中与 shuffle 有关的宏和函数。分析验证了 _mm_shuffle_epi16
存在的可能性,并利用 _mm_shuffle_epi8
实现了该函数。
下面是 SSE 系列内置函数中与 shuffle 有关的 intrinsic 函数:
// Integer shuffle, SSE
extern __m64 _mm_shuffle_pi16(__m64 _A, int _Imm);
// SP FP shuffle, SSE
extern __m128 _mm_shuffle_ps(__m128 _A, __m128 _B, unsigned int _Imm);
// DP FP shuffle, SSE2
extern __m128d _mm_shuffle_pd(__m128d _A, __m128d _B, int _Imm);
// Integer shuffle, SSE2
extern __m128i _mm_shuffle_epi32(__m128i _A, int _Imm);
extern __m128i _mm_shufflehi_epi16(__m128i _A, int _Imm);
extern __m128i _mm_shufflelo_epi16(__m128i _A, int _Imm);
// Integer shuffle, SSSE3
extern __m128i _mm_shuffle_epi8 (__m128i a, __m128i b);
extern __m64 _mm_shuffle_pi8 (__m64 a, __m64 b);
1. _mm_shuffle_pd
和 _MM_SHUFFLE2
可以使用 _MM_SHUFFLE2
来构造 _mm_shuffle_pd
中的参数 _Imm
, _MM_SHUFFLE2
是 SSE2
中定义的一个宏, 定义如下
#define _MM_SHUFFLE2(x,y) (((x)<<1) | (y))
因为 __m128d