gpt4 book ai didi

c++ - 如何反转 __m128 类型变量?

转载 作者:可可西里 更新时间:2023-11-01 18:20:13 27 4
gpt4 key购买 nike

我知道这应该是一个谷歌搜索问题,但我就是找不到答案。

假设我有一个__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))

源索引和目标索引按升序从右到左运行。前两个选择器值(fp0fp1)指定m1 中的源组件。 ,最后两个( fp2fp3 )在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com