假想分支目标地址高速缓存
2019-11-22

假想分支目标地址高速缓存

本发明涉及一种用于微处理器中的假想分支目标地址高速缓存(BTAC)。该BTAC快取分支指令的目标地址与其他相关数据,像是指令长度、在一指令快取线内的位置以及一方向预测。BTAC由微处理器的指令高速缓存的一提取地址进行检索,以确定是否发生一BTAC的命中。在流水线早期,于译码所检索的指令快取线中任何指令前,BTAC与指令高速缓存被并行存取。若一BTAC的命中发生,且BTAC的方向预测被采用,则微处理器假想分支至BTAC所提供的目标地址。此分支是假想的,因为快取线中的指令尚未被译码;因此,对于快取在BTAC的数据所关联的假设的分支指令,不能确定其存在于指令高速缓存中。

230因此,在图17,于步骤1614置换了B项目602B后,在步骤1716中,控制逻辑电路404将更新LastWritten暂存器1502以指定B边。此外,于步骤1624置换了A项目602A后,在步骤1726中,控制逻辑电路404将更新LastWritten暂存器1502以指定A边。

总之,以上所述仅为本发明的较佳实施例而已,当不能以此限定本发明所实施的范围。凡是依本发明权利要求所作的均等变化与修饰,皆应属于本发明专利涵盖的范围。

147在一具体实施例中,假想调用/返回堆栈406并不存在。所以,步骤812、818与832皆未执行。

69X-阶段314,或称转换阶段314,指令转换器将x86宏指令(macroinstruction)转换成微指令(microinstruction),让其余的流水线阶段可加以执行。X-阶段314将转换过的微指令送至X-阶段指令序列346。

144在步骤834或步骤818进行假想、分支后,于步骤816中,控制逻辑电路404产生一指示于控制信号482中,表示已响应BTAC 402而执行一假想分支。

221然而,由于在程序序列中CALL指令相当接近JMP指令,若流水线相当长,如处理器300,则在A项目602A的VALID位702被更新前,有相当多数量的周期可能会通过。因此,在BTAC 402被已执行的JMP指令更新前,特别是在A项目602A的VALID位702与所选取BTAC 402快取线的BTAC 402路置换状态被JMP指令更新之前,CALL指令非常有可能会选取BTAC 402。所以,CALL指令将见到两边皆为无效,而且也将依“当两个项目皆无效时,总是更新A这一边”的解决方式,来更新A项目602A。这样做是有问题的,因为JMP指令的目标地址714将由于一空的即无效的B项目602B可用来快取CALL指令的目标地址714而不必要地被取代。

169现请参照图11,为依本发明列举的程序代码实例片段及一表格1100,为说明图10假想分支预测错误的侦测与更正的一范例。程序代码片段包括一先前程序代码片段与一现行程序代码片段。例如,该先前程序代码片段表明(illustrate)在图3处理器300进行工作交换(taskswitch)前,图4指令高速缓存432中位于虚拟地址0x00000010的程序代码。该现行程序代码片段则表明在工作交换后,指令高速缓存432中位于虚拟地址0x00000010的程序代码,就像在虚拟别名化情形所可能发生的。

196在步骤1318中,控制逻辑电路404检查比较器418的结果474,以确定是否有不匹配发生。若假想返回地址353与非假想返回地址355不相匹配,则在步骤1326中,控制逻辑电路404会控制多工器422选取非假想返回地址355,以使处理器300分支至非假想返回地址355。

120此外,比较器604产生控制信号618,以控制路选择多工器606。路选择多工器606因而在BTAC 402产生的快取线中,选取四个路之一的A项目624与B项目626。将A项目624与B项目626送至A/B选择多工器608以及控制逻辑电路404。控制逻辑电路404因应命中信号452、A项目624与B项目626、提取地址495及其他控制信号而产生一控制信号622,来控制A/B选择多工器608。A/B选择多工器608便选取A项目624或B项目626两者之一作为图3BTAC 402的目标地址352及图4的SBI 454。

74S-阶段328,或称储存阶段(store stage)328,从E-阶段326接收微指令的执行结果,将其储存至内存。此外,还将E-阶段326所计算的分支指令的目标地址356在I-阶段302时从S-阶段328送至指令高速缓存432。再者,I-阶段302的BTAC 402通过从S-阶段328而来的分支指令的解析目标地址来予以更新。此外,在BTAC 402的其他假想分支数据(speculative branch information,简称SBI)454(见图4)也从S-阶段328来更新。假想分支数据454包括分支指令长度,在一指令高速缓存432快取线内的位置,分支指令是否涵盖多条指令高速缓存432快取线,分支是否为一调用或返回指令,以及用来预测分支指令的方向的数据,如图7部分所描述的。

96在一具体实施例中,BTAC 402比指令高速缓存432还小。特别是,BTAC 402快取目标地址所用的快取线数量比指令高速缓存432所含的还少。BTAC 402未整合在指令高速缓存432的结果是(虽然使用指令高速缓存432的提取地址495作为索引),若处理器300分支至BTAC 402所产生的目标地址352,它是以假想方式进行的。此分支是假想的,因根本无法确定在所选定的指令高速缓存432快取线中,是否有一分支指令存在,更别说是目标地址352因的而被快取的分支指令了。命中BTAC 402仅表示一分支指令先前存在于提取地址495所选取的指令高速缓存432快取线中。之所以无法确定一分支指令是否存在于所选取的快取线中,至少有两个理由。