gpt4 book ai didi

c++ - SSE 内在函数 : masking a float and using bitwise and?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:31 24 4
gpt4 key购买 nike

基本上这个问题与 x86 汇编器有关,您有一个数字,您希望使用 and 将其设置为零或 数字 本身。 .如果你and number 为负数你会得到 number 本身,但如果你 and它与零你得到零。

现在我在使用 SSE instrinsics 时遇到的问题是 float 在二进制中与 double 不同(或者我弄错了)。无论如何,这是代码,我尝试使用各种 float 来掩盖第二个和第三个数字(分别为 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;
}

最佳答案

AND 时需要使用按位(整数)掩码,例如清除 vector 中的备用值,您可以这样做:

__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 }

关于c++ - SSE 内在函数 : masking a float and using bitwise and?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485959/

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