我想比较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
返回值uint8x8_t
,它让我感到困惑,因为我无法使用
if(vclt_s8(a, b))
决定第一个更小。
然后假设我们有两个int8x8_t
:int8x8_t a
和int8x8_t b
,我们如何知道a
是否更小?
答案 0 :(得分:5)
您可以在官方ARM documentation for NEON中找到更多详细信息。
所有比较函数的通用描述都说明:
如果对于通道的比较为真,则该通道中的结果将所有位设置为1。如果通道的比较为假,则所有位都设置为零。返回类型是无符号整数类型。
假设你有:(这是伪代码,[]
意味着每个向量的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];
a
的4个第一个值小于b
的4个第一个值:c
的前4个值中的所有位都设置为1
,他们255
。
同样地,所有4个最后的值都更大:c
的4个最后值的所有位都设置为0,使它们成为0
。
希望这有帮助!
答案 1 :(得分:0)
vclt_s8 - 与每个向量数据类型的Less Than的向量比较是signed char。 vclt.datatype dest,reg1,reg2。 reg1 - 一个带符号的char矢量 - 携带该数据类型的8个元素。 reg2 - 必须与上面的数据类型相同。
将reg1的元素与reg2进行比较。 如果条件为真,则将所有位作为一个放在dest中的相应向量中, 否则将所有位都置为零。