ARM Cortex A7:避免内存贴面?

时间:2016-09-13 19:53:01

标签: arm compiler-optimization 32-bit

在支持Thumb的ARMv7上,我们可以使用BX指令来避免所有胶合代码吗?

由于该指令采用32位寄存器,我们是不是很好?

如果是,当我在生成的代码中看到胶合代码时,我应该专门为我的机器输出,对吧?

由于

1 个答案:

答案 0 :(得分:0)

是的,因为BX需要一个32位的寄存器,所以不需要veener,因为你可以覆盖整个寻址空间。

当然,你需要在寄存器中加载一个32位值,这通常意味着不断汇集,所以如果你想要挤出它的每个周期并且你的程序不是太大你就会#39 ;相对分支更好。正如@Notlikethat所指出的那样,如果您还没有在注册表中使用该地址,则BX只能LDR PC, ...使用<script type="text/javascript"> $(document).ready(function(){ $("#my-menu").mmenu({ navbars: [{"position": "bottom", "content": ["<div>my footer</div>"] }); }); (除非您需要支持ARMv4T互通) )。

相对的,非条件的,32位Thumb分支具有24位寻址空间,因此您可以达到+/- 16MB(对于其他人,请参阅here)。如果您正在进行ELF,请非常小心使用16位相对Thumb分支。如果目标无法用24位寻址,则32位分支将生成24位重定位,链接器将插入veener。 16位分支生成11位重定位,ELF for ARM指定链接器需要为这些生成器生成veener,因此您可能会冒链接时间 - 范围分支。