首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拇指长条件分支-2

拇指长条件分支-2
EN

Stack Overflow用户
提问于 2016-12-01 17:08:34
回答 2查看 720关注 0票数 0

ARMv7-M参考手册的A6.7.12节给出了分支指令(B)的四种可能编码:

  • T1: 16位指令,4位条件,8位地址
  • T2: 16位指令,无条件,11位地址
  • T3: 32位指令,4位条件,17位地址
  • T4: 32位指令,无条件,21位地址

有了T3 (以及T1和T2),我只能从程序计数器分支到-1048576到1048574个位置。如果我想让一个有条件的分支离得更远,我该怎么办?

以下( UAL):

代码语言:javascript
复制
it     ne
bne.w  some_far_label

给我一个反对的警告:

代码语言:javascript
复制
Warning: IT blocks containing 32-bit Thumb instructions are deprecated in ARMv8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-01 18:12:42

如果我想让一个有条件的分支离得更远,我该怎么办?

只需在该寄存器中使用带有目标地址的MOV{cond} PC, Rx指令:

代码语言:javascript
复制
LDR R1, =some_very_far_label
IT NE
MOVNE PC, R1
票数 1
EN

Stack Overflow用户

发布于 2016-12-01 20:17:42

既然您说的是实际针对ARMv7,那么最好的方法就是忽略或禁用它,最好的方法是不以ARMv8 8-A为目标,从一开始就触发它。

对于v7 CPU来说,这是完全不相关的;对于现有的v8-A CPU来说,它基本上也是不相关的,因为AArch32的要点是向后兼容现有的v7代码,如果它们不运行该代码,至少不像它们的v7前辈那样运行,那么它们就不会很受欢迎。对于未来的V8-CPU,一旦很大一部分软件已经过渡到AArch64,在可能的情况下,重组您的AArch32代码以避免IT块可能是有意义的,但无论如何,最糟糕的事情就是只需要多个背对背的单指令块。

整件事都有点傻,真的。ARMv8-A体系结构参考手册对“IT的部分废弃”的描述是:

出于性能原因,ARMv8 8-A不推荐使用T32 IT指令。..。完整的ARMv7 IT指令功能仍然可用,以便执行遗留的T32代码。..。

是的,可以有一个可选的控制位来捕获“废弃”的使用,但是即使v8-A CPU实现了这个功能,也没有任何操作系统期望运行v7代码来设置它。未来的AArch32实现仍然需要支持多指令IT块,它们可能比替代代码慢,因此ARM试图说服我们避免它们。坦率地说,我可以想象V8-CPU理论上的未来,它的目标不是运行现有的32位代码,因此可能会使那些使高效支持多指令it块变得不理想的优化变得更有可能完全放弃AArch32支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40916440

复制
相关文章

相似问题

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