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

Bon*_*rWu 0 arm simd intrinsics neon

我想比较2 int8x8_t,从http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html 我们可以得到描述vclt_s8,但它没有告诉我们太多的细节.

`uint8x8_t vclt_s8 (int8x8_t, int8x8_t)`
Run Code Online (Sandbox Code Playgroud)

预期指令的形式:vcgt.s8 d0,d0,d0

返回值uint8x8_t,它让我感到困惑,因为我无法 if(vclt_s8(a, b))决定第一个是否更小.

那么假设我们有两个int8x8_t:int8x8_t a而且int8x8_t b,我们怎么知道它是否a更小?

mbr*_*non 5

您可以在NEON的官方ARM 文档中找到更多详细信息.

所有比较函数的通用描述都指出:

如果对于通道的比较为真,则该通道中的结果将所有位设置为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);
Run Code Online (Sandbox Code Playgroud)

你会得到:

c = [255, 255, 255, 255, 0, 0, 0, 0];
Run Code Online (Sandbox Code Playgroud)

4个第一个值a小于4个第一个值b:前4个值的所有位c都设置为1,形成它们255.

以同样的方式,所有4个最后的值都更大:最后4个值的所有位c都设置为0,从而产生它们0.

希望这可以帮助!