我正在查看一段将编写一对 32 位寄存器的 ARM 代码,如下所示:
ldm r9!, {r0, r1}
sub r8, r8, #2
stm r10!, {r0, r1}
当 r10 输出指针是字对齐但并不总是 dword 对齐时,上面的代码是否写入一个 64 位值?我对文档的阅读使我认为在这种情况下会写入 64 位值,但我担心 8 字高速缓存行可能已经包含 7 个字然后此代码执行 64 位写入并拆分一半的情况缓存行末尾的双字。
我在想,如果 stm 改为执行 2 个 32 位字写入,那可能会避免这个问题。所以,我的问题是使用两个不相邻的寄存器会强制 stm 写 2 个单词而不是 dword 吗?
ldm r9!, {r0, r2}
sub r8, r8, #2
stm r10!, {r0, r2}
上面的代码是否与以下代码基本相同:
ldm r9!, {r0, r1}
sub r8, r8, #2
str r0, [r10], #4
str r1, [r10], #4