【发布时间】:2019-01-27 06:41:15
【问题描述】:
据我了解,在处理器流水线的开头,指令指针(指向下一条要执行的指令的地址)在获取后由分支预测器更新,以便随后可以获取这个新地址下一个循环。
但是,如果在流水线的早期修改了指令指针,这不会影响当前可能依赖于旧指令指针值的执行阶段的指令吗?比如在做call时,需要将当前EIP压入栈中,但是在分支预测过程中更新指令指针时,这不会受到影响吗?
【问题讨论】:
-
在许多流水线体系结构中,程序计数器是假的,软件可以看到的具有正确的值。执行真正繁重的工作的逻辑使用了一些到许多其他指令指针地址,一个或多个分支预测计算,用于获取内存的实际指针等。Arm 是一个简单的程序计数器,程序计数器提前两条指令很久没有这样了,管道随着预测而变深。但是我们仍然有一个 r15,它给出了指令集中设计的结果。
-
像 EIP 这样的可用(伪)寄存器对于正在使用的指令集将具有正确的值,而与用于实际获取的任何锁存地址或组合地址无关。
标签: assembly x86 cpu cpu-architecture branch-prediction