我想比较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_t
: int8x8_t a
和int8x8_t b
,我们怎样才能知道是否a
更小?
您可能会发现在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
。
希望这可以帮助!
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)