作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道这应该是一个谷歌搜索问题,但我就是找不到答案。
假设我有一个__m128
变量a
,它的内容是a[0]
,a[1]
,a[2]
,a[3]
。是否有单个函数可以将其反转为a[3]
、a[2]
、a[1]
,a[0]
?
最佳答案
使用_mm_shuffle_ps() .该指令已在 SSE 中可用,并且可以通过组合来自两个输入 vector 中的每一个的任意 32 位分量,将 4 个 32 位分量收集到一个 vector 中。
如何使用宏 _MM_SHUFFLE()
创建掩码
宏定义如下:
/* Create a selector for use with the SHUFPS instruction. */
#define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
(((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
源索引和目标索引按升序从右到左运行。前两个选择器值(fp0
和fp1
)指定m1
中的源组件。 ,最后两个( fp2
和 fp3
)在 m2
中的那些.每个选定的源组件都分配给 m3[index]
, 其中index
对应于它的选择器参数 fp<index>
.
反转 vector 中的 32 位分量
__m128 input = ...;
__m128 reversed = _mm_shuffle_ps(input,input,_MM_SHUFFLE(0, 1, 2, 3));
注意:掩码是立即数。它不能是动态的,因为它是生成的机器指令的一部分。
英特尔内部函数指南:https://software.intel.com/sites/landingpage/IntrinsicsGuide/
关于c++ - 如何反转 __m128 类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051746/
我是一名优秀的程序员,十分优秀!