【发布时间】:2012-09-20 23:15:49
【问题描述】:
以下 ARM 指令在一条指令中将多个浮点寄存器存储在内存中(当然,在每个寄存器存储之后递增基地址):
VSTMIA R0! {S1-S4}
现在的问题是寄存器列表必须是连续的,即如果你想在 R0 中传输寄存器,例如在 R0+4 中的 S3,如果不调用单个存储,你就无法做到这一点。 我有几个寄存器要一次性存储在内存中,但问题是它们需要以不同的顺序存储。我真的不想交换寄存器(我有大约 7 个寄存器)。那么有没有更聪明的方法呢? 还想知道是否有人知道使用 VSTM 进行单次多次传输是否比使用单个 VSTR 指令进行多次传输更快?
【问题讨论】:
-
STM(存储多个)指令将比单个 STR 指令更快。您可以为 STM 和 LDM 选择单独的寄存器,但它们的读/写顺序不能更改。
-
如果这是关于像 rgb->bgr 对话这样的交错/去交错数据,请查看 neon。它有那些东西。
-
AIUI 性能可以高度依赖于实现,但 LDM 和 STM 的使用频率很高,如果不让它们至少与单独的加载/存储一样快,那就太愚蠢了。如果您可以简单地重命名代码中的寄存器,我会这样做。