深入探索VFP与Neon:条件执行、向量操作及数据处理
1. 条件执行
条件代码的精确含义取决于其是由浮点运算还是ARM数据处理指令设置的。由于浮点值无符号,无符号条件在此无意义。唯一能更新状态标志的VFP指令是VCMP,它会设置FPSCR中的相关位。不过,条件标志和指令由APSR控制,因此需将FPSCR标志复制到APSR,可使用指令 VMRS APSR_nzcv, FPSCR 完成。
VCMP指令有 .F32 和 .F64 两种类型,示例如下:
VCMP.F32 S0, S1 @ S0 - S1并设置条件标志
VCMP.F64 D2, D3 @ D2 - D3并设置条件标志
还可将FPSCR的全部内容传输到ARM寄存器,或用ARM寄存器内容加载FPSCR:
VMRS R4, FPSCR @ 将FSPCR复制到R4
VMSR FSPCR, R4 @ 将R4复制到FPSCR
使用按位运算符(AND、ORR、EOR)可屏蔽单个位并测试特定条件标志,这在处理与‘len’和‘stride’相关的位时很有用。
条件执行的一大好处是减少分支指令数量,降低代码整体大小,因为分支指令执行时间开销大,通常需三个周期来重新填充处理器流水线。例如:
VADDEQ.F32 S0,
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



