你能告诉我如何从另一个向量中按值重置向量的某些字节吗?
嗯,也就是说,有两个向量:
int main()
{
__m128i my_m128i = _mm_set_epi32(7, 6, 5, 4);
__m128i my_m128i_mask = _mm_set_epi32(0, 1, 1, 0);
}
如何根据my_m128i_mask向量值使my_m128i向量向量的值7和4为零?
我通过乘法思考,例如将两个向量的每个 32 位相乘并自动得到零。但是在英特尔中没有找到这样的“功能”。
只找到这些:
_mm_mul_pd:将 a 和 b 中的压缩双精度(64 位)浮点元素相乘并将结果存储在 dst 中。
_mm_mul_epi32:将 a 和 b 中每个打包的 64 位元素中的 32 位最小符号整数相乘,并将有符号的 64 位结果存储在 dst 中。
将向量 __m128i 的第 4 个 32 位乘以另一个向量 __m128i 的第 4 个 32 位的“函数”是什么,我没有找到。
也许还有另一种方法可以将掩码归零?
尝试使用按位与运算
_mm_and_ps
,但只有这样才能将掩码指定为(0,-1,-1,0)