如何使用像正常值这样的gcc向量执行布尔运算?

时间:2013-02-21 12:46:12

标签: gcc boolean simd

对于正常值,1用于表示true,0表示false:

float a = 1.0f;
float b = 2.0f;
float c = (a > b);  // this will be 0.0f

但是对于向量,1111...111(32个二进制1)用于表示真,而0用于表示false。要浮动,32个二进制1是-nan(不是带减号的数字):

typedef float v4 __attribute__((vector_size(sizeof(float)*4)));
v4 a = {1, 2, 3, 4};
v4 b = {0 ,1, 4, 5};
v4 c = (a > b); // this becomes { -nan, -nan, 0.0f, 0.0f }

我的问题是: 是否有可能以“矢量化”方式将c“转换”为{ 1.0f, 1.0f, 0.0f, 0.0f }

事实上,我想为像素的RGB做“钳制”(max(min(value, maximum), minimal))。如果上述情况无法实现,那么采用矢量化方式进行钳位的其他方法是什么?

PS:我更喜欢 -intrinsics 方式。

0 个答案:

没有答案