1

我认为这是一个愚蠢的问题,但我尝试了一天没有运气来解决这个问题,所以这里是。

我有四个向量的寄存器(float32x4),我想对其中一些进行一些处理,另一个我想将其设置为 0。

例如c中的这个问题:

for (int i=1; i<=4; i++)
{
    float b = 4/i;
    if(b<=3)
        result += process(b);
}

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

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

我知道有一个 vcltq_f32 但我尝试了这个但没有结果。

4

2 回答 2

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);
于 2011-07-25T21:25:32.297 回答
0

我对 Neon 了解不多,但在大多数 SIMD 架构中,您可以通过比较和屏蔽(按位与)来做到这一点。您使用比较指令,然后生成一个通常可以用于此目的的掩码。

于 2011-07-25T11:36:49.760 回答