我使用 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 指令创建掩码向量,您可以根据这些向量在两个结果之间选择值。
- 使用适当的 vcmp 创建掩码
- 计算两种情况的结果
- 使用 1 中的掩码将上述两个结果中的相应元素放入每个泳道。
目前我不能准确地告诉你说明是什么,因为我是在火车上用我的 iPhone 写的。但在引用手册中找到它们不会有问题。
关于assembly - 影响标志的 NEON 汇编矢量指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089023/