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中也有同样的问题。
/************************* Stay hungry, Stay foolish. @willhua ************************/