assembly - 影响标志的 NEON 汇编矢量指令

标签 assembly simd neon

我使用 arm assembly 和 NEON SIMD 指令。我想获得两个 Q 寄存器中最大的 16 位无符号值,并将它们与阈值进行比较。如果所有 16 位值都小于阈值,我调用一个函数。如果一个或多个值大于阈值,我将调用另一个函数。

以下 SIMD 指令获取最大值。

//阈值是一个r寄存器

vdup.16       q15, threshold  
vmax.u16      q12, q14, q13  
vcgt.u16      q11, q12, q15

vcgt 会影响 FPSCR 标志吗?我觉得不是。然后我必须检查 q11 是否为零。如果是zeor,则调用function1,否则调用function2。 就像

if (q11 == 0)
//call function1
else
//call function2 

如果不将 q11 移动到 4 个 r 寄存器,我该怎么做?

谢谢

最佳答案

没有 - 至少在用户模式下没有。 这些 cmp 指令创建掩码向量,您可以根据这些向量在两个结果之间选择值。

  1. 使用适当的 vcmp 创建掩码
  2. 计算两种情况的结果
  3. 使用 1 中的掩码将上述两个结果中的相应元素放入每个泳道。

目前我不能准确地告诉你说明是什么,因为我是在火车上用我的 iPhone 写的。但在引用手册中找到它们不会有问题。

关于assembly - 影响标志的 NEON 汇编矢量指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089023/

相关文章:

将 C 代码转换为汇编 Mips 语言

vectorization - "vectorization"是什么?

ios - 我可以在 iphone 6(即 A64 机器)上执行 a32 内联 NEON 代码吗?

arm - neon 实现汇总 SAD(绝对差值之和)时出现总线错误

c++ - 是否可以使用 d[x] 寄存器中的值作为 vld 中的地址?

带有内联汇编的 C++,有什么问题吗?

assembly - 将 token 字符串转换为 ASCII 值字符串 [TI-83+ ASM]

assembly - 将寄存器设置为 1 的 MIPS 指令

c - 使用 SSE (x*x*x)+(y*y*y) 的乘法

c++ - 使用 double 运算的快速 SSE 低精度指数