我正在编写arm程序集代码,我想将两个32位数据加载到寄存器中,有两个指令我可以使用,
1. ldm r0, {r1, r2}
2. ldr r1, [r0]!
ldr r2, [r0]我想知道哪个更快
发布于 2013-11-25 14:00:21
指令周期定时随体系结构的不同而略有变化。
理论上,当加载两个或多个寄存器时,ldm速度更快,只需计算循环数。但这有关系吗?很难,因为大多数循环都是由于缓存遗漏的惩罚而浪费的。根据高速缓存行对齐地址要重要得多。
这不是性能,但可能是减少的代码大小是有益的。
总结一下,当ldm/stm不会削弱您的算法/实现时,尝试使用它们。
如果您想尽快访问内存,无论花费多少,ldrd/strd都是最好的选择。
“成本”是多少?八加两个连续寄存器的内存对齐。
你说了算。
PS :ldm/stm类指令在Aarch64上被废弃--理由充分,而ldrd/strd等效指令不需要上述“成本”。
PS2 :你的问题中有一些错误
1. ldm r0, {r1, r2}
2. ldr r1, [r0]
ldr r2, [r0, #4]https://stackoverflow.com/questions/20187093
复制相似问题