首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arm装配速度ldm和ldr

arm装配速度ldm和ldr
EN

Stack Overflow用户
提问于 2013-11-25 07:42:08
回答 1查看 1.9K关注 0票数 1

我正在编写arm程序集代码,我想将两个32位数据加载到寄存器中,有两个指令我可以使用,

代码语言:javascript
复制
1.   ldm             r0, {r1, r2}    
2.   ldr             r1, [r0]!
     ldr             r2, [r0]

我想知道哪个更快

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 14:00:21

指令周期定时随体系结构的不同而略有变化。

理论上,当加载两个或多个寄存器时,ldm速度更快,只需计算循环数。但这有关系吗?很难,因为大多数循环都是由于缓存遗漏的惩罚而浪费的。根据高速缓存行对齐地址要重要得多。

这不是性能,但可能是减少的代码大小是有益的。

总结一下,当ldm/stm不会削弱您的算法/实现时,尝试使用它们。

如果您想尽快访问内存,无论花费多少,ldrd/strd都是最好的选择。

“成本”是多少?八加两个连续寄存器的内存对齐。

你说了算。

PS :ldm/stm类指令在Aarch64上被废弃--理由充分,而ldrd/strd等效指令不需要上述“成本”。

PS2 :你的问题中有一些错误

代码语言:javascript
复制
1.   ldm             r0, {r1, r2}    
2.   ldr             r1, [r0]
     ldr             r2, [r0, #4]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20187093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档