在支持Thumb的ARMv7上,我们可以使用BX
指令来避免所有胶合代码吗?
由于该指令采用32位寄存器,我们是不是很好?
如果是,当我在生成的代码中看到胶合代码时,我应该专门为我的机器输出,对吧?
由于
答案 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,因此您可能会冒链接时间 - 范围分支。