有没有人知道如何使用Neon内在函数uint8x8_t vclt_s8(int8x8_t,int8x8_t)

时间:2013-12-05 01:59:08

标签: arm simd neon intrinsics

我想比较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_tint8x8_t aint8x8_t b,我们如何知道a是否更小?

2 个答案:

答案 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中的相应向量中, 否则将所有位都置为零。