是否有相当于 _mm_slli_si128(__m128i a, int num) 的浮点数?
Is there an equivalent of _mm_slli_si128(__m128i a, int num) for floats?
假设我有一个包含 4 个浮点数的向量:
__m128 vector = |f0|f1|f2|f3| (pseudocode)
我的目的是将该变量转换为:
|0.0|f0|f1|f2|
右移似乎是最简单的选择,但我还没有找到可用于浮点数的内在函数。
完成此任务最快的方法是什么?
这是我的解决方案:
__m128 const mask = _mm_castsi128_ps(_mm_set_epi32(0, -1, -1, -1));
vector = _mm_shuffle_ps(vector, vector, _MM_SHUFFLE(0,3,2,1))
vector = _mm_and_ps(vector, mask);
假设我有一个包含 4 个浮点数的向量:
__m128 vector = |f0|f1|f2|f3| (pseudocode)
我的目的是将该变量转换为:
|0.0|f0|f1|f2|
右移似乎是最简单的选择,但我还没有找到可用于浮点数的内在函数。
完成此任务最快的方法是什么?
这是我的解决方案:
__m128 const mask = _mm_castsi128_ps(_mm_set_epi32(0, -1, -1, -1));
vector = _mm_shuffle_ps(vector, vector, _MM_SHUFFLE(0,3,2,1))
vector = _mm_and_ps(vector, mask);