pan*_*ami 4 c++ sse intrinsics
基本上,问题与 x86 汇编器有关,其中您有一个数字想要设置为零或使用. 如果你的数字带有负一,你会得到数字本身,但如果你的数字为零,你会得到零。andandand
现在,我在 SSE 内在函数方面遇到的问题是,二进制中的浮点数与双精度数不同(或者也许我错了)。无论如何,这是代码,我尝试使用各种浮点数来掩盖第二个和第三个数字(分别为 127.0f 和 99.0f),但没有运气。
#include <xmmintrin.h>
#include <stdio.h>
void print_4_bit_num(const char * label, __m128 var)
{
float *val = (float *) &var;
printf("%s: %f %f %f %f\n",
label, val[3], val[2], val[1], val[0]);
}
int main()
{
__m128 v1 = _mm_set_ps(1.0f, 127.0f, 99.0f, 1.0f);
__m128 v2 = _mm_set_ps(1.0f, 65535.0f, 127.0f, 0.0f);
__m128 v = _mm_and_ps(v1, v2);
print_4_bit_num("v1", v1);
print_4_bit_num("v2", v2);
print_4_bit_num("v ", v);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您需要使用按位(整数)掩码AND,因此要清除向量中的替代值,您可能会执行以下操作:
__m128 v1 = _mm_set_ps(1.0f, 127.0f, 99.0f, 1.0f);
__m128 v2 = _mm_castsi128_ps(_mm_set_epi32(0, -1, 0, -1));
__m128 v = _mm_and_ps(v1, v2); // => v = { 0.0f, 127.0f, 0.0f, 1.0f }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2778 次 |
| 最近记录: |