与霓虹内在函数中的浮点数比较

时间:2011-07-25 08:26:48

标签: android c arm neon intrinsics

我认为这是一个愚蠢的问题,但我试着用一天的时间来解决这个问题而不是运气,所以这就是。

我注册了四个向量(float32x4),我想对其中一些进行处理,另一个我想将它设置为0。

例如c:

中的这个问题
for (int i=1; i<=4; i++)
{
    float b = 4/i;
    if(b<=3)
        result += process(b);
}

所以第一个不会处理,但另一个会处理,所以我需要一个寄存器,其中第一个通道我有0个而另一个有结果。

但我不知道如何在霓虹内在函数上做到这一点。

我知道有一个vcltq_f32,但我试过这个,但没有结果。

2 个答案:

答案 0 :(得分:3)

像这样:

const float32x4_t vector_3 = vdupq_n_f32(3.0f);
uint32x4_t mask = vcleq_f32(vector_b, vector_3);
vector_b = (float32x4_t)vandq_u32((uint32x4_t)vector_b, mask);

答案 1 :(得分:0)

我对Neon知之甚少,但在大多数SIMD架构中,您可以通过比较和屏蔽(按位AND)来实现。您可以使用比较指令,然后生成一个通常可用于此的掩码。