【问题标题】:Non delayed branch instruction MIPS非延迟分支指令 MIPS
【发布时间】:2019-11-26 05:23:24
【问题描述】:

我目前正在阅读 David A Patterson 和 John L. Hennessy 的教科书计算机组织和架构。

MIPS架构中的非延迟分支指令是什么意思?

【问题讨论】:

    标签: mips cpu-architecture


    【解决方案1】:

    没有分支延迟槽的分支指令。

    在这种情况下,分支之后的指令在分支目标处的第一条指令之前执行。 (与采用 的传统 MIPS 分支不同,它在没有分支预测或推测执行的情况下隐藏分支延迟。强制编译器将一些希望有用的东西静态调度到该插槽中)

    MIPS introduced these in 2014, in MIPS32r6 / MIPS64r6 根据维基百科:

    一个没有延迟槽的新分支系列:

    • 具有 26 位偏移量的无条件分支 (BC) 和分支链接 (BALC),
    • 具有 21 位偏移量的零/非零条件分支,
    • 全套有符号和无符号条件分支在两个寄存器(例如 BGTUC)或一个寄存器与零(例如 BGTZC)之间进行比较,
    • 将寄存器与零进行比较的全套分支和链接(例如 BGTZALC)。

    还有一个无延迟槽的索引跳转指令,旨在支持大的绝对地址。

    注意添加到先前分支助记符的C 后缀。


    还请注意,例如BGTUC reg, reg, target 是一个新事物。原始 MIPS kept branch conditions simple so they could be evaluated in only half a cycle,因此只需要 1 个分支延迟槽即可完全隐藏分支延迟。

    这种微架构原因在现代微架构中早已不复存在,可以进行分支预测,因此添加真正的硬件分支指令(而不是像经典的 bgtu reg, reg, target 这样的伪指令)可以将 slt 保存到寄存器中。

    没有分支延迟槽在微架构上与 eqne 之外的新 2 寄存器条件无关。添加它们是因为 MIPS32/64 r6 正在重新组织操作码无论如何,而不是因为删除分支延迟槽使它们成为可能。

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 1970-01-01
      • 2015-03-28
      • 2023-03-29
      • 2021-07-10
      • 2014-09-17
      • 2011-06-03
      • 1970-01-01
      • 2019-02-14
      相关资源
      最近更新 更多