NEON的比较是把所有的bit都设置为1

NEON中的比较指令,如果结果为true,是把所有的bit都设置为1,而不是设置为1.

    ushort data1[4] = {129,0,136,255};
    uint16x4_t v0 = vld1_u16(data1);
    uint16x4_t v1 = vdup_n_u16(128);
    uint16x4_t cr = vcgt_u16(v0, v1);
    LOGD("uint %d %d %d %d", cr[0],cr[1],cr[2],cr[3]);

    int16x4_t sv0 = vld1_u16(data1);
    int16x4_t sv1 = vdup_n_u16(128);
    int16x4_t scr = vcgt_u16(v0, v1);
    LOGD("int %d %d %d %d", scr[0],scr[1],scr[2],scr[3]);

输出:

D/OLOG:uint 65535 0 65535 65535
D/OLOG:int -1 0 -1 -1

所以,这也解释了某些时候你发现true返回的结果为-1而不是1,并不是驱动有问题,而是文档没有理解正确。比如在OpenCL中也有同样的问题。

你可能感兴趣的:(NEON的比较是把所有的bit都设置为1)