【问题标题】:Does anybody know how to use Neon intrinsics uint8x8_t vclt_s8 (int8x8_t, int8x8_t)有人知道如何使用 Neon 内在函数 uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
【发布时间】:2013-12-21 19:14:15
【问题描述】:

我想比较 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是否更小?

【问题讨论】:

    标签: arm simd neon intrinsics


    【解决方案1】:

    vclt_s8 - 小于每个向量数据类型的向量比较是有符号字符。 vclt.datatype 目标,reg1,reg2。 reg1 - 一个带符号的 char 向量 - 携带该数据类型的 8 个元素。 reg2 - 必须与上述数据类型相同。

    比较 reg1 和 reg2 的元素。 如果条件为真,则将所有位作为 1 放入 dest 中的相应向量中, 否则将所有位设为零。

    【讨论】:

      【解决方案2】:

      您可以在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

      希望这会有所帮助!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2016-05-20
      • 2011-10-09
      相关资源
      最近更新 更多