【问题标题】:NEON intrinsic for arithmetic shiftNEON 固有的算术移位
【发布时间】:2013-09-13 11:15:34
【问题描述】:

我想使用编译器内在函数在 NEON 寄存器上执行 SIMD 算术右移(即符号位移位)恒定量。然而,我在documentation 中提到的所有这些转变内在函数中都找不到这种特殊的转变。 NEON 是否甚至支持算术移位(不过,如果不支持会很奇怪)而且我太笨了,找不到它(或者正在寻找错误的术语)?或者它可能只是普通的vshr(q)_n 固有的,而这种转变是由实际使用的类型的符号决定的?

【问题讨论】:

  • “右算术移位”没有内在的。很难找到处理内在函数的 NEON 手册。我使用的是来自ARM Compiler toolchain 的附录 G。这是一本较旧的手册,但组织得很好,据我所知,这些信息仍然适用。我提取了附录(第 603-674 页)并将其打印和装订。在 Office Depot 只需 5 美元或 10 美元。

标签: bit-shift neon intrinsics


【解决方案1】:

啊,切换到 ARM-NEON。符号很容易错过。

当然还有算术右移指令,和逻辑右移指令是一样的。您可以通过选择数据类型来决定是要转换算术还是逻辑。

例如

  int8x8_t   vshr_n_s8(int8x8_t a, int b);

将移位算术,因为数据类型是 s8 而:

  uint8x8_t   vshr_n_u8(uint8x8_t a, int b);

由于数据类型是无符号的,因此将进行逻辑移位(以零移位而不是复制符号位)。

【讨论】:

  • 啊,我猜到了类似的东西,但是如果不是在内部函数部分,那么至少在解释相应处理器指令的地方,ARM 最好在某处说明这一点,我也检查了(或者我只是错过了它)。感谢您的澄清。
猜你喜欢
  • 2011-04-29
  • 2020-07-02
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多