一 概述
_mm_shuffle_epi32和_MMSHUFFLE是与SSE指令集相关的开发工具,主要用于SIMD向量操作。
二 _mm_shuffle_epi32 函数
功能:对128位整数向量(__m128i)中的四个32位整数进行重排序
原型:__m128i _mm_shuffle_epi32 (__m128i a, int imm8)
参数:
a:输入向量(包含4个32位整数)
imm8:4-bit控制掩码(范围0-255)
返回值:新的__m128i向量,元素顺序由掩码决定
三 _MMSHUFFLE 宏
作用:生成_mm_shuffle_epi32所需的控制掩码
定义:#define _MMSHUFFLE(z, y, x, w) (((z)<<6)|((y)<<4)|((x)<<2)|(w))
参数规则:
每个参数表示目标位置使用的源索引(0-3)
参数顺序对应目标位置[3,2,1,0]的源索引
四 使用示例
#include <emmintrin.h>
__m128i vec = _mm_setr_epi32(10, 20, 30, 40); // [10,20,30,40]
// 交换前两个和后两个元素
__m128i res = _mm_shuffle_epi32(vec, _MM_SHUFFLE(2,3,0,1));
// 结果变为 [20,10,40,30]
五 VS2015注意事项
1)需要包含<emmintrin.h>头文件
2)启用SSE2指令集
项目属性 → C/C++ → 代码生成 → 启用增强指令集。
3)调试模式下建议使用/arch:SSE2编译选项