【发布时间】:2015-12-04 14:34:31
【问题描述】:
我正在阅读有关 VFP 寄存器的信息,以及与基于标量的处理器(或基于超级标量的处理器,例如 intel x86)相比的事实 但我的问题更详细一点。
我猜(只是猜测)VFP 寄存器和向量处理器在计算数学运算方面做得更快。但是如果我们只是用它来存储值呢?
将寄存器的值存储和读取到 VFP 寄存器或从通用臂寄存器存储/读取值更快的是什么?
提出这个问题的原因(不是问题的一部分): 你可能在想我为什么要这么做?因为我将一些 ARM 汇编代码注入到应用程序中,以将一些寄存器值(特别是 LR 和 FP)保存在数组中。对我来说,问题是当我想将此寄存器值存储到数组但首先必须将它们保存到其他一些通用寄存器(例如 r8、r9、r10)然后将它们指向我的数组时。但是因为我注入的 ARM 汇编代码位于某些函数的中间,所以我必须推送和弹出堆栈以维护这些寄存器上的先前值(这是内存操作并减慢整个应用程序,因为我的代码被注入到应用程序)。所以我想到使用 VFP 寄存器来保存数据并避免推送弹出,因为在我的目标应用程序中它从未被使用过。是正道还是跛脚?
【问题讨论】:
-
这只是没有ARM官方文档的猜测,但是,一旦ARM伪装成RISC架构并且这种复制只占用一条指令,它的成本应该不会超过整数寄存器之间的复制。
-
@Netch 谢谢 :P 但是在维基百科中提到 VFP CPU(或 co-CPU)比基于标量的 CPU 更快。但我真的不知道。
-
请注意,VFP 的“向量”方面在现代 CPU 上已被弃用且不受支持 - 它实际上只是一个常规 FPU。此外,“标量”(与“向量”/SIMD)和“超标量”(即每个周期发出 >1 条指令)之间也存在一些混淆,它们是完全不同的上下文,并不直接相关。
标签: floating-point arm cpu-registers