有谁知道如何使用NEON内在uint8x8_t vclt_s8(int8x8_t,int8x8_t)

2019-10-29 17:25发布

我想比较2 int8x8_t ,从http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html我们可以得到说明vclt_s8 ,但它并没有告诉我们很多信息。

`uint8x8_t vclt_s8 (int8x8_t, int8x8_t)`

vcgt.s8 D0,D0,D0:预期指令(S)的形式

返回值uint8x8_t ,它混淆了我,因为我不能使用if(vclt_s8(a, b))来决定,首先是小。

然后,我们有两个int8x8_tint8x8_t aint8x8_t b ,我们怎样才能知道是否a更小?

Answer 1:

您可能会发现在ARM官方更详细的NEON文档 。

所有比较函数的一般说明指出:

如果比较是一个真正的车道,结果在车道设置为一个所有位。 如果比较是车道假,所有位都设置为零。 返回类型是无符号整数类型。

假设有:(这是伪代码中, []意味着每个矢量的8个值)

 int8x8_t a = [-1, -1, -1, -1,  1,  1,  1,  1];
 int8x8_t b = [ 0,  0,  0,  0,  0,  0,  0,  0];
uint8x8_t c = vclt_s8(a, b);

你会得到:

c = [255, 255, 255, 255, 0, 0, 0, 0];

的4个第一值a小于的4个第一值b :前4个值的所有比特c被设置为1 ,使它们255

以同样的方式,所有4个最后的值是越大:的最后4个值的所有位c被设置为0,使其0

希望这可以帮助!



Answer 2:

vclt_s8 - 每个矢量数据类型符号的字符向量比较了小于。 vclt.datatype DEST,REG1,REG2。 REG1 - 一个符号字符病媒携带数据类型的8个元素。 REG2 - 必须是相同的数据类型与上述的一个。

通过与REG2 REG1的元素比较元素。 将所有位作为一个在连结相应的载体,如果条件为真,否则所有的位地方为零。



文章来源: Does anybody know how to use Neon intrinsics uint8x8_t vclt_s8 (int8x8_t, int8x8_t)