繁体   English   中英

不同类型的分支机构

[英]Different types of branches

所以我对分支的承诺有两种类型:

双向分支,基于存储在寄存器中的一些计算的结果来获取分支。 昂贵并导致管道冲洗。

单向分支,这就像一个函数指针或一个goto,它将转到常量地址。 纠正我,如果我错了,但我认为这比两个分支便宜得多,因为现代处理器将在管道的早期解决这些指令。

我想如果存在第三种类型的分支,循环展开会更快。 通常,循环展开会增加指令大小,但会避免双向分支。 如果你有一个支持指令大小和两个分支的分支怎么办? 就像一个分支一样,在一段代码上执行类似循环的事情。

存在什么类型的分支?

跳转(或呼叫)可以是:

- 直接或间接的
- 相对的或绝对的
- 有条件的或无条件的

条件/无条件描述分支是否是谓词。

相对/绝对是对分支目标进行编码的问题,可以是当前指令指针的偏移量,也可以是分支目标绝对地址

如果分支是绝对的 ,则目标地址可以存储为变量,因为它可以在代码中的任何位置使用(理想情况下)。 这意味着您可以加载此变量并对其执行间接分支

分支的这些属性几乎是正交的。 常见的组合是:

- 直接相对条件。 你的标准if
- 直接相对无条件。 您的标准goto和函数调用。
- 直接绝对无条件。 一些函数调用。
- 直接绝对条件。 很少见,没有多少硬件架构可以编码这样的指令。
- 间接绝对无条件。 函数指针。 这通常是最昂贵的分支类型。

其他组合往往难以编码。

可能会有一些进一步的复杂情况,例如far branches ,但这应该是一个良好的开端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM