多重加载/存储 n 个寄存器/警告
来源:互联网 发布:707的医药软件 编辑:程序博客网 时间:2024/06/07 06:04
转自:http://scc.qibebt.cas.cn/docs/optimization/VTune(TM)%20User's%20Guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/XScale_HH/LipsXSc/Load_Store_Multiple_of_n_Register.htm
XSC_LDMSTM_N
解释
LDM/STM 或其等效指令(如 Thumb 指令 PUSH 或 POP)的执行周期数总是比 LDR/STR 或 LDRD/STRD 多(假设命中缓存),因此寄存器结果延迟增加。将 LDM/STM 指令替换成 LDR/STR 或 LDRD/STRD 尽管会增加代码空间,但速度可能会更快。
建议
LDMSTM_1 - 多重加载/存储 1 个寄存器
使用常规的“加载/存储”总是更好,因为速度更快。LDMSTM_2 - 多重加载/存储 2 个寄存器
使用“加载/存储”双字或两条 LDR/STR 指令总是更好;因为速度更快,也节省代码空间。LDMSTM_3 - 多重加载/存储 2 个以上寄存器
如果要优化时间(代码执行很多次),建议使用 LDR/STR 或 LDRD/STRD 代码序列。如果要优化代码空间,建议使用 LDM/STM。
备注
传输的寄存器越多,可从扩展的序列中获得的增益百分比就越低。
示例 1
原始代码
LDM r0!, {r1,r2,r3,r4,r5};
替代性方案 1
LDR r1, [r0], #4
LDR r2, [r0], #4
LDR r3, [r0], #4
LDR r4, [r0], #4
LDR r5, [r0], #4
替代性方案 2
LDR r1, [r0], #4
LDR r2, [r0], #4
LDR r3, [r0], #4
LDRD r4, [r0], #8
备注
LDRD 具有对齐限制。Rd(目标寄存器)必须是第偶数个,EA(有效地址)必须是 8 字节对齐的。
跟在 LDRD 后面的任何内存操作指令都会产生暂停,因此最好不要像上面的“替代性方案 2”那样,使用 LDRD r2, [r0], #8 替代第二条与第三条指令。
示例 2
原始代码
STM r0!, {r1,r2,r3,r4,r5}
替代性方案 1
STR r1, [r0], #4
STR r2, [r0], #4
STR r3, [r0], #4
STR r4, [r0], #4
STR r5, [r0], #4
替代性方案 2
STR r1, [r0], #4
STRD r2, [r0], #8
STRD r4, [r0], #8
备注
STRD 有对齐限制。Rd 应该是偶数,EA 必须对齐 8 字节。
- 多重加载/存储 n 个寄存器/警告
- 动态加载N个控件
- 多寄存器加载/存储指令的8种模式
- 基于ARM9的汇编寄存器加载/存储指令
- 多重背包 (n种物品,每种m个)
- 同时使用n个window onload加载
- ARM:单和多寄存器加载存储、状态寄存器、协处理、软中断、乘法、交换等汇编指令
- 寄存器加载代码
- 寄存器装载和存储
- 【汇编指令】arm指令集之但寄存器数据load/store (加载存储)
- 8个寄存器
- 通过$.Deferred 实现判断N个图片加载完毕逻辑
- 存储过程编程过程中的n个问题!
- 存储过程获取第N个最大值方法
- 关于hql的多重关联join fetch预加载和select挑选多个属性/对象
- 字在寄存器中存储
- arm 寄存器装载和存储
- 寄存器的装载和存储
- 粗略比对一下windows、linux和OS。算是个人体会和感想吧
- hdu 1026 Ignatius and the Princess I
- eclipse Fail to load the JNI share library"C:\Java\jdk1.7.0\bin\..\jre\bin\client\jvm.dll
- Android新开一个activity需要配置文件AndroidManifest.xml
- 使用Google Unit Test 测试你的C++代码
- 多重加载/存储 n 个寄存器/警告
- Java开发环境配置(JDK)
- ARM+linux系统移植3G拨号上网收发短信(三)
- 博客迁移公告[最后一篇]
- C++ 自定义结构体和类 内存对齐
- Paper Reading - Snap and ask: Answering Multimodal Question by Naming Visual Instance
- const 数组 & 作用域
- python异常处理
- ContentResolver query 参数详解