专利名称:用于使用预先通知技术改变程序的顺序流程的方法和设备的制作方法
技术领域:
本发明大体上涉及用于在处理器管线中处理指令的技术,且更具体来说涉及用于产生间接分支指令的目标地址的早期指示的技术。
背景技术:
许多便携式产品,例如手机、膝上型计算机、个人数据助理(PDA)或类似物,需要使用执行支持通信和多媒体应用的程序的处理器。用于这些产品的处理系统包含处理器、指令源、输入操作数源以及用于存储执行结果的存储空间。举例来说,指令和输入操作数可存储在由通用寄存器和多级高速缓冲存储器组成的阶层式存储器配置中,其包含例如指令高速缓冲存储器、数据高速缓冲存储器和系统存储器。为了在程序的执行中提供高性能,处理器通常在管线中执行指令。处理器还可使 用推测性执行来获取和执行在预测分支目标地址处开始的指令。如果分支被误预测,那么必须从管线清空推测性执行的指令,并且在正确的路径地址处重新开始管线。在许多处理器指令集中,经常有分支到从寄存器的内容导出的程序目的地地址的指令。此指令通常称为间接分支指令。由于间接分支对寄存器的内容的依赖性,通常难以预测分支目标地址,因为在每次执行间接分支指令时寄存器可能具有不同的值。由于校正误预测的间接分支通常需要对间接分支指令的反向跟踪以便在正确的分支路径上获取和执行指令,因此处理器的性能可能降低。而且,误预测指示处理器不正确地推测性获取和开始在错误分支路径上的指令处理,从而造成用于处理并不使用的指令以及用于从管线中清空所述指令的功率增加。
发明内容
在本发明的若干方面中,本发明认识到有利的是使在执行指令时可能发生的误预测的数目最少以在处理器系统中改善性能且减少功率要求。为此,本发明的实施例适用于一种用于改变程序的顺序流程的方法。所述方法从由第一指令识别的寄存器检索程序指定的目标地址,其中所述寄存器是在指令集架构中界定。在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址,其中所述第二指令经动态地确定为间接分支指令。本发明的另一实施例针对一种用于提供间接分支地址的预先通知的方法。分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址。在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。本发明的另一方面针对一种用于提供间接分支目标地址的预先通知的设备。所述设备采用寄存器,其用于保持由程序指定为间接分支指令的预先通知(ADVN)间接地址的指令存储器地址。所述设备还采用下一程序地址选择器电路,其监视以所述寄存器为目标的指令,且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述ADVN间接地址,以用于在推测性执行所述间接分支指令时用作下一程序地址。从以下具体实施方式
和附图将明了本发明的更完整理解以及本发明的另外特征和优点。
图I是其中可有利地采用本发明的实施例的示范性无线通信系统的框图;图2是根据本发明的支持间接分支指令的分支目标地址的处理器复合体的功能框图;图3A是根据本发明的32位预先通知(ADVN)指令的一般格式,其指定具有间接分支目标地址值的寄存器;图3B是根据本发明的16位ADVN指令的一般格式,其指定具有间接分支目标地址值的寄存器;图4A是根据本发明的用于使用先前间接分支执行的历史的间接分支预测的方法的代码实例;图4B是根据本发明的用于间接分支预先通知的方法的代码实例,所述方法使用图3A的ADVN指令以用于提供间接分支目标地址的预先通知;图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路;·图6是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预先通知的方法的代码实例;图7是根据本发明的第一间接分支预先通知(ADVN)过程,其合适地用于间接分支指令的分支目标地址;图8A说明示范性目标跟踪表(TTT);图SB是根据本发明的第二间接分支预先通知(ADVN)过程,其合适地用于提供间接分支指令的分支目标地址的预先通知;图9A说明根据本发明的示范性第二间接分支目标地址(BTA)预先通知(ADVN)电路;图9B说明根据本发明的示范性第三间接分支目标地址(BTA)预先通知(ADVN)电路;以及图IOA和IOB是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预先通知的方法的代码实例。
具体实施例方式现在将参考附图更完整地描述本发明,其中展示本发明的若干实施例。然而,本发明可以各种形式体现,且不应解释为限于本文陈述的实施例。事实上,提供这些实施例以使得本发明将为详尽且完整的,且将本发明的范围完整地传达给所属领域的技术人员。根据本发明教示的用于被操作或用于实行操作的计算机程序代码或“程序代码”可初始以闻级编程语言来编写,例如C、C++、I \\ \ φ、Smalltalk、JavaScript 、Visual Basic 、TSQL、Perl或各种其它编程语言。通过将高级程序代码转换为原生汇编程序来将以这些语言中的一者编写的程序编译为目标处理器架构。用于目标处理器架构的程序也可以原生汇编语言直接编写。原生汇编程序使用机器级二进制指令的指令助记表示。如本文使用的程序代码或计算机可读媒体称为机器语言代码,例如格式可被处理器理解的目标代码。图I说明其中可有利地采用本发明的实施例的示范性无线通信系统100。出于说明的目的,图I展示三个远程单元120、130和150以及两个基站140。将认识到,常见的无线通信系统可具有多得多的远程单元和基站。分别包含由组件125A、125C、125B和12 表示的硬件组件、软件组件或两者的远程单元120、130、150和基站140已经调适以体现如下文进一步论述的本发明。图I展示从基站140到远程单元120、130和150的前向链路信号180以及从远程单元120、130和150到基站140的反向链路信号190。在图I中,将远程单元120展示为移动电话,将远程单元130展示为便携式计算机,且将远程单元150展示为无线本地回路系统中的固定位置远程单元。举例来说,远程单元可替代地为手机、寻呼机、对讲机、手持式个人通信系统(PCS)单元、例如个人数据助理等便携式数据单元,或例如仪表读取装备等固定位置数据单元。尽管图I说明根据本发明 的教示的远程单元,但本发明不限于这些示范性所说明单元。本发明的实施例可合适地用于具有间接分支指令的任何处理器系统中。图2是根据本发明的处理器复合体200的功能框图,其支持准备间接分支指令的分支目标地址的预先通知。处理器复合体200包含处理器管线202、通用寄存器堆(GPRF) 204、控制电路206、L1指令高速缓冲存储器208、L1数据高速缓冲存储器210以及存储器阶层212。控制电路206包含程序计数器(PC) 215和分支目标地址寄存器(BTAR) 219,其如下文更详细描述般相互作用以用于控制包含指令获取级214的处理器管线202的目的。为了论述的清楚而未展示外围装置(其可连接到处理器复合体)。处理器复合体200可合适地用于图I的硬件组件125A到12 中以用于执行存储在LI指令高速缓冲存储器208中的程序代码,利用存储在LI数据高速缓冲存储器210中且与存储器阶层212相关联的数据。处理器管线202可在通用处理器、数字信号处理器(DSP)、专用处理器(ASP)或类似物中操作。处理器复合体200的各种组件可使用专用集成电路(ASIC)技术、现场可编程门阵列(FPGA)技术或其它可编程逻辑、离散门或晶体管逻辑或适合于既定应用的任何其它可用技术来实施。处理器管线202包含六个主要级指令获取级214、解码与预先通知(ADVN)级216、分派级218、读取寄存器级220、执行级222以及回写级224。虽然展示单个处理器管线202,但本发明的具有间接分支目标地址预先通知的指令处理适用于超标量设计和实施并行管线的其它架构。举例来说,为高时钟速率设计的超标量处理器可具有两个或两个以上并行管线且每一管线可将指令获取级214、具有ADVN逻辑电路217的解码与ADVN级216、分派级218、读取寄存器级220、执行级222以及回写级224划分为两个或两个以上管线式级,从而增加总体处理器管线深度以便支持高时钟速率。以处理器管线202的第一级开始,与程序计数器(PC) 215相关联的指令获取级214从LI指令高速缓冲存储器208获取指令以供稍后的级处理。如果指令获取在LI指令高速缓冲存储器208中未命中,意味着待获取的指令不在LI指令高速缓冲存储器208中,那么从存储器阶层212获取所述指令,存储器阶层212可包含多级高速缓冲存储器,例如第2级(L2)高速缓冲存储器,以及主存储器。指令可从其它源加载到存储器阶层212,例如引导只读存储器(ROM)、硬驱动器、光盘,或从例如因特网等外部接口加载到存储器阶层212。随后在具有ADVN逻辑电路217的解码与ADVN级216中解码所获取的指令,从而提供如下文更详细描述的用于间接分支目标地址值的预先通知的额外能力。与ADVN逻辑电路217相关联的是分支目标地址寄存器(BTAR)219,其可如图2所示位于控制电路206中,但不限于这种放置。举例来说,BTAR 219可合适地位于解码与ADVN级216内。分派级218取得一个或一个以上经解码指令且将其分派到例如在超标量或多线程处理器中利用的一个或一个以上指令管线。读取寄存器级220从GPRF 204获取数据操作数或从转发网络226接收数据操作数。转发网络226在GPRF 204周围提供快速路径以在每当结果操作数从执行级可用时供应所述结果操作数。即使具有转发网络,来自深执行管线的结果操作数也可能花费三个或三个以上执行循环。在这些循环期间,读取寄存器级220中的需要来自执行管线的结果操作数数据的指令必须等待直到结果操作数可用为止。执行级222执行所分派的指令,且回写级224将结果写入到GPRF 204且也可在结果将用于随后指令中的情况下通过转发网络226将结果发送回到读取寄存器级220。由于结果可能在回写级224中是以与编程次序相比不同的次序接收的,因此在将结果写入到GPRF 204时回写级224使用处理器工具来保留编程次序。下文关于详细代码实例来提供用于提供间接分支指令的目标地址的预先通知的处理器管线202的更详细描述。处理器复合体200可经配置以在存储在计算机可读存储媒体上的程序的控制下执行指令。举例来说,计算机可读存储媒体可直接在本地与处理器复合体200相关联,例如可从LI指令高速缓冲存储器208 (用于对从LI数据高速缓冲存储器210获得的数据进行操作)和存储器阶层212可用,或者通过例如输入/输出接口(未图示)而关联。处理器复合体200还在程序的执行中从LI数据高速缓冲存储器210和存储器阶层212存取数据。计算机可读存储媒体可包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、快闪存储器、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、压缩光盘(CD)、数字视频光盘(DVD)、其它类型的可装卸式盘或任何其它合适的存储媒体。图3A是根据本发明的32位ADVN指令300的一般格式,其将由编程人员或软件工具识别的寄存器指定为保持间接分支目标地址值。ADVN指令300在指定所识别寄存器的传 入的间接分支指令之前向处理器复合体200通知存储在所识别寄存器中的实际分支目标地址。通过如下文更详细描述提供预先通知,可改善处理器性能。ADVN指令300经说明为具有条件代码字段304,其由若干指令集架构(ISA)利用以基于指定的一或多个旗标而指定指令将无条件地还是有条件地执行。操作码305将指令识别为具有至少一个分支目标地址寄存器字段Rm 307的分支ADVN指令。指令特定字段306允许操作码扩展和其它指令特定的编码。在具有含根据指令中的指定条件代码字段有条件地执行的指令的此ISA的处理器中,影响分支目标地址寄存器的最后指令的条件字段Rm将通常用作ADVN指令的条件字段,但不限于此指定。本发明的教示适用于多种指令格式和架构规范。举例来说,图3B是根据本发明的16位ADVN指令350的一般格式,其指定具有间接分支目标地址值的寄存器。16位ADVN指令350类似于32位ADVN指令300,具有操作码355、分支目标地址寄存器字段Rm 357以及指令特定位356。还注意到,可利用其它位格式和指令宽度来编码ADVN指令。
间接分支型指令的一般形式可在处理器管线202中有利地使用和执行,例如依寄存器分支Rx(BX)、相加PC、移动Rx PC和类似物。为了描述本发明,在如下文进一步描述的代码序列实例中使用间接分支指令的BX Rx形式。应注意,其它形式的分支指令通常在ISA中提供,例如具有指令指定的分支目标地址(BTA)的分支指令、具有经计算为指令指定的偏移地址与基地址寄存器的和的BTA的分支指令和类似指令。为了支持这些分支指令,处理器管线202可利用分支历史预测技术,其基于跟踪例如先前分支指令执行的条件执行状态且存储此执行状态以用于预测这些指令的未来执行。处理器管线202可支持此分支历史预测技术且另外支持使用ADVN指令来提供间接分支目标地址的预先通知。举例来说,处理器管线202可使用分支历史预测技术直到遇到ADVN指令为止,所述ADVN指令随后使用如本文描述的ADVN工具来超驰分支目标历史预测技术。在本发明的其它实施例中,处理器管线202还可经设置以监视使用ADVN指令的准确性,且当ADVN识别的目标地址不正确一次或一次以上时对于后续遇到同一间接分支忽 略ADVN指令。还应注意,对于支持具有ADVN指令的ISA的处理器的特定实施方案,处理器 可将遇到的ADVN指令处理为无操作(NOP)指令或将检测到的ADVN指令标记为未定义。此夕卜,ADVN指令可在具有动态分支历史预测电路的处理器管线中被处理为Ν0Ρ,所述动态分支历史预测电路具有足够的硬件资源来跟踪在代码区段的执行期间遇到的分支且如下文描述针对超过所述动态分支历史预测电路可用的硬件资源的代码区段启用ADVN指令。而且,在动态分支历史预测电路具有用于预测间接分支目标地址的不良结果的情况下,ADVN指令可结合动态分支历史预测电路来使用以用于提供间接分支目标地址的预先通知。举例来说,从动态分支历史预测电路产生的经预测分支目标地址可由通过使用ADVN指令提供的目标地址超驰。另外,呈现有利的自动间接目标推断方法以用于提供如下文描述的间接分支目标地址的预先通知。图4A是根据本发明的用于间接分支预测的方法的代码实例400,所述方法在未遇到ADVN指令的情况下使用一般历史方法来预测间接分支执行。代码实例400的执行是参考处理器复合体200来描述。为了此实例的目的,指令A到D401到404可为循序算术指令集,其基于指令A到D401到404的分析并不影响GPRF 204中的寄存器R0。寄存器RO由加载RO指令405用用于间接分支指令BX RO 406的目标地址加载。为了此实例的目的,指令401到406中的每一者经指定为无条件地执行。还假定,加载RO指令405在LI指令高速缓冲存储器208中可用,使得当指令A401在执行级222中完成执行时,已在获取级214中获取加载RO指令405。随后获取间接分支BX RO指令406,同时在解码与ADVN级216中解码加载RO指令405。在下一管线级中,准备加载RO指令405以经分派用于执行,且解码BXRO指令406。而且,在解码与ADVN级216中,基于先前间接分支执行的历史而做出BX RO指令406是被取得还是未被取得的预测,且还预测间接分支的目标地址。对于此实例,BX RO指令406经指定为被无条件地“取得”且ADVN逻辑电路217仅需要将间接分支目标地址预测为地址X。基于此预测,引导处理器管线202开始推测性获取从地址X开始的指令,地址X在给定“取得”状态时通常是从当前指令寻址的重定向。处理器管线202还清空管线中在间接分支BX RO指令406之后的任何指令,如果这些指令不与在地址X处开始的指令相关联。处理器管线202继续获取指令直到在执行级中可确定经预测地址X是否经正确预测为止。在处理指令的同时,可能遇到暂停情形,例如关于加载RO指令405的执行可能发生的暂停情形。加载RO指令405的执行可在LI数据高速缓冲存储器中存在命中的情况下无延迟地返回来自LI数据高速缓冲存储器210的值。然而,加载RO指令405的执行在LI数据高速缓冲存储器210中存在未命中的情况下可能花费大量周期。加载指令可使用来自GPRF 204的寄存器来供应基地址,且随后在执行级222中将中间值加到基地址以产生有效地址。所述有效地址经由数据路径232发送到LI数据高速缓冲存储器210。在LI数据高速缓冲存储器210中的未命中的情况下,必须从可包含例如L2高速缓冲存储器和主存储器的存储器阶层212获取数据。此外,数据可能在L2高速缓冲存储器中未命中,从而导致从主存储器获取数据。举例来说,LI数据高速缓冲存储器210中的未命中、存储器阶层212中的L2高速缓冲存储器中的未命中以及对主存储器的存取可能需要数百个CPU周期来获取数据。在LI数据高速缓冲存储器未命中之后获取数据所花费的周期期间,BX RO指令406在处理器管线202中暂停直到运行中操作数可用为止。所述暂停可视为在读取寄存器级220中或执行级222的开始处发生。应注意,在具有多个指令管线的处理器中,加载RO指令405的暂停可能并不暂停在任何其它管线中发生的推测性操作。由于LI D高速缓冲存储器210中的未命中所造成的暂停的长度,可能推测性获取大量指令,这在存在间接分支目标地址的不正确预测的情况下可能显著影响性能和功率使用。可通过使用作为图2的控制电路206的部分的保持电路来在处理器管线中产生暂停。所述保持电路产生保持信号,其可例如用以选通管线级寄存器以暂停管线中的指令。对于图2的处理器管线202,可例如在读取寄存器级中在并非所有输入都可用的情况下激活保持信号,使得管线保持等待完成指令执行所必要的输入的到达。当所有必要的操作数变为可用时释放所述保持信号。在未命中的解析后,将加载数据经由路径240发送到作为回写级224的部分的回写操作。随后将操作数写入到GPRF 204且也可发送到上文描述的转发网络226。现在可将RO的值与经预测地址X进行比较以确定是否需要清空推测性获取的指令。由于用以存储分支目标地址的寄存器在每次执行间接分支指令时可能具有不同的值,因此存在将使用当前预测方法清空推测性获取的指令的高概率。图4B是根据本发明的用于间接分支预先通知的方法的代码实例420,所述方法使用图3A的ADVN指令以用于提供间接分支目标地址的预先通知。基于图4A的指令A到D401到404不影响分支目标地址寄存器RO的先前提到的分析,加载RO指令405可在指令序列中向上移动以例如在图4B的代码实例中放置于指令A421之后。另外,ADVN RO指令423,例如图3A的ADVN指令300,直接放置于加载RO指令422之后作为用于间接BX RO指令427的分支目标地址的预先通知的先行辅助。在图4B的新指令序列421到427流过处理器管线202时,当加载RO指令422在执行级中时ADVN RO指令423将在读取级220中,且指令D426将在获取级214中。对于加载RO指令422在LI数据高速缓冲存储器210中命中的情形,RO的值在加载RO执行结束之前是已知的且与RO值一起经由转发网络226快速转发到读取级,RO值在读取级220的末尾或在用于ADVN RO指令的执行级的开始之前也是已知的。在间接分支指令进入解码与ADVN级216之前确定RO值允许ADVN逻辑电路217将确定的RO值选择为BX RO指令427的分支目标地址而不会有任何额外的周期延迟。应注意,BX RO指令427在管线中是动态识别的。虽然通常ADVN指定的寄存器(例如此代码实例中的R0)将保持与间接分支指定的目标地址寄存器相同的地址,但可能遇到异常。在针对此地址异常的一种方法中,不将ADVN指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较,且如果选择了不正确的目标地址,那么在管线中稍后会检测到错误且采取适当动作,例如清空管线。在一不同方法中,将ADVN指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较,且在找到匹配之前将不针对推测性执行做出改变,通常情况将是这样。如果未找到匹配,那么管线将如同未遇到ADVN指令那样操作。应注意,对于处理器管线202,对于在LI数据高速缓冲存储器210中存在命中的情况,加载RO指令和ADVN RO指令可能已放置在指令B之后而不会引起任何进一步延迟。然而,如果在LI数据高速缓冲存储器中存在未命中,那么将起始暂停情形。对于LI数据高速缓冲存储器210中的未命中的此情况,加载RO和ADVN RO指令将需要基于管线深度而放置在BX RO指令之前适当数目个未命中延迟周期(如果可能的话)以避免引起任何进一步延迟。 大体上,ADVN指令在代码序列中的放置优选为在BX指令之前N个指令。在处理器管线的上下文中,N表示接收间接分支指令的级与辨识ADVN指定的分支目标地址的级(例指令获取级214和执行级222)之间的级的数目。在与转发网络226 —起使用的示范性处理器管线202中,N为二,且在不使用转发网络226的情况下,N为三。对于例如使用转发网络的处理器管线,如果BX指令在ADVN指令之前N等于二个指令,那么ADVN目标地址寄存器Rm值是由于转发网络226而在读取寄存器级220的末尾处确定。在例如针对ADVN指令使用并不使用转发网络226的处理器管线的替代实施例中,如果BX指令在ADVN指令之前N等于三个指令,那么ADVN目标地址寄存器Rm值是在BX指令进入解码与ADVN级216时在执行级222的末尾处确定。指令的数目N也可取决于额外的因素,包含上部管线中的暂停(例如归因于指令获取级214中的延迟)、可能改变高达超标量处理器中发布的K个指令的指令发布宽度,以及例如在ADVN与BX指令之间出现的中断。大体上,ISA可推荐尽可能早地调度ADVN指令,以最小化这些因素的影响。虽然图4B是以单个ADVN RO指令来说明,但在遇到任何间接分支之前可例示多个ADVN指令。所述多个ADVN指令以FIFO方式应用于接下来遇到的间接分支,例如可通过使用堆栈设备而获得。应注意,下一遇到的间接分支指令在编程次序上大体上与下一间接分支指令相同。可在确定使用多个ADVN指令是否适当之前评估可能对此一般规则引起异常的代码。图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路500。第一间接BTA预先通知电路500包含ADVN执行电路504、分支目标地址寄存器(BTAR)电路508、BX解码电路512、选择电路516,以及用于响应于影响PC地址产生的输入的下一程序计数器(PC)电路520。在ADVN执行电路504中执行ADVN Rx指令之后,将Rx的值加载到BTAR电路508中。当在BX解码电路512中解码BX指令时且如果BTAR如选择电路516所选择是有效的,那么将BTAR电路508中的BTA值由下一 PC电路520用作下一获取地址。也可在BTAR有效处于作用中时使用BTAR有效指示来停止获取,从而节省原本将与获取错误地址处的指令相关联的功率。
图6是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预先通知的方法的代码实例600。在代码序列601到607中,指令A601、B603、C604和D606与先前描述的相同,且因此不影响分支目标地址寄存器。两个指令加载RO指令602和相加R0、R7、R8指令605影响此实例的分支目标寄存器R0。间接分支指令BX RO 607与图4A和4B的先前实例中使用的相同。在代码实例600中,即使加载RO指令602和相加R0、R7、R8指令605影响BTA寄存器R0,相加R0、R7、R8指令605也是影响BTA寄存器RO的内容的最后指令。通过跟踪代码序列600的执行模式,自动间接目标推断方法电路可以合理的准确性提供预先通知在BX RO指令607进入解码与ADVN级216时RO的最新值是否应用作ADVNBTA。在一个实施例中,写入到RO的最后的值将在BX RO指令进入解码与ADVN级216时用·作BX RO指令的值。此实施例是基于如下评估对于与此BX RO指令相关联的代码序列,写入到RO的最后的值可被估计为正确值历时较高百分比的时间。图7是根据本发明的第一间接分支预先通知(ADVN)过程700,其合适地用以提供间接分支指令的分支目标地址的预先通知。第一间接分支ADVN过程700利用最后写入器表,其可通过寄存器堆编号来寻址或标引,使得与具有32个条目RO到R31的寄存器堆相关联的最后写入器表将可通过索引值O到31来寻址。类似地,如果寄存器堆具有较少条目,例如14个条目RO到R13,那么最后写入器表将可通过索引值O到13来寻址。最后写入器表中的条目中的每一者存储一指令地址。第一间接分支ADVN过程700还利用分支目标地址寄存器更新器关联性存储器(BTARU),其具有通过指令地址来存取的若干条目且每条目含有一有效位。在进入第一间接分支ADVN过程700之前,初始化最后写入器表以使指令地址无效,例如为零,其中通常将不会发现间接分支ADVN代码序列的指令地址且BTARU条目被初始化为无效状态。第一间接分支ADVN过程700以经获取指令流702开始。在决策框704处,做出是否接收到对可能是间接分支指令的目标寄存器的任一寄存器Rm进行写入的指令的确定。举例来说,在具有14条目寄存器堆(具有寄存器RO到R13)的处理器中,将跟踪对寄存器RO到R13中的任一者进行写入的指令,作为间接分支指令的可能目标寄存器。对于监视具有间接分支指令的代码区段的多次通过的技术,可通过在第一次通过时识别间接分支指令来确定特定Rm。举例来说,在遇到指定相同Rm的间接分支之前接收具有一个以上Rm改变指令的代码序列。以多次通过过程700来处理此代码序列。在过程700的第一次通过中,在遇到间接分支指令之前,将最后的Rm改变指令的地址存储在最后写入器表中的经标引Rm地址处,从而覆写先前Rm改变指令的地址。在遇到间接分支指令之前在第一次通过时不更新BTAR,因为在第一次通过中并不知道何时已接收到最后的Rm改变指令。遇到的间接分支指令断言一有效位以指示改变了经指定Rm的最后指令是将用于存储在经指定Rm中的目标地址的预先通知的有效指令。在第二次通过过程700中,最后Rm改变指令将引起更新BTAR,且当遇到(例如在解码级中识别出)间接分支指令时,BTAR可用于分支目标地址的预先通知。返回到框704,如果所接收的指令不影响Rm,那么第一间接分支ADVN过程700前进到决策框706。在决策框706处,做出所接收的指令是否为间接分支指令(例如BXRm指令)的确定。如果所接收的指令不是间接分支指令,那么第一间接分支ADVN过程700前进到决策框704以评估下一接收的指令。返回到决策框704,如果所接收的指令不影响Rm,那么第一间接分支ADVN过程700在第一次通过框708、710和712中前进到框708。在框708处,在最后写入器表的Rm地址处加载影响Rm的指令的地址。在框710处,检查BTARU是否有在所述指令地址处的有效位。在决策框712处,做出在BTARU中的指令地址条目处是否发现经断言有效位的确定。如果未发现经断言有效位,例如在第一次通过过程框708、710和712中可能发生,那么第一间接分支ADVN过程返回到决策框704以评估下一接收的指令。返回到决策框706,如果接收到间接分支指令(例如BX Rm指令),那么第一间接分支ADVN过程700前进到框714。在框714处,检查最后写入器表是否有在地址Rm处的有效指令地址。在决策框716处,做出在Rm地址处是否发现有效指令地址的确定。如果未发现有效指令地址,那么第一间接分支ADVN过程700前进到框718。在框718处,将在指令地址处的BTARU位条目设定为无效,且第一间接分支ADVN过程700返回到决策框704以评估下一接收的指令。返回到决策框716,如果发现有效指令地址,那么第一间接分支ADVN过程700前进到框720。如果存在待决的更新,那么第一间接分支ADVN过程700可暂停直到待决的更新被解析为止。在框720处,将指令地址处的BTARU位条目设定为有效,且第一间接分支ADVN过程700前进到决策框722。在决策框722处,做出分支目标地址寄存器(BTAR)是否具有有效地址的确定。如果BTAR具有有效地址,那么第一间接分支ADVN过程700前进到框724。在框724处,使用存储的BTAR值提供间接分支指令Rm的预先通知,且第一间接分支ADVN过程700返回到决策框704以评估下一接收的指令。返回到决策框722,如果BTAR经确定为不具有有效地址,那么第一间接分支ADVN过程700返回到决策框704以评估下一·接收的指令。返回到决策框704,如果所接收的指令确实影响间接分支指令的Rm,例如在第二次通过第一间接分支ADVN过程700中可能发生,那么第一间接分支ADVN过程700在第二次通过框708、710和712中前进到框708。在框708处,在最后写入器表的Rm地址处加载影响Rm的指令的地址。在框710处,检查BTARU是否有在所述指令地址处的有效位。在决策框712处,做出在BTARU中的指令地址条目处是否发现经断言有效位的确定。如果发现经断言有效位,例如在第二次通过过程框708、710和712中可能发生,那么第一间接分支ADVN过程700前进到框726。在框726处,用存储在Rm中的执行指令的BTAR更新器结果来更新分支目标地址寄存器(BTAR),例如图2的BTAR 219。第一间接分支ADVN过程700随后返回到决策框704以评估下一接收的指令。在图8A和8B中说明的另一自动间接分支目标地址过程确定在间接分支指令进入解码级时存储在程序寄存器中的最新值是否应用作分支目标地址(BTA)的预先通知。图8A说明示范性目标跟踪表(TTT) 800,其具有TTT条目802,TTT条目802具有六个字段,包含条目有效位804、标记字段805、寄存器Rm地址806、数据有效位807,和上/下计数器值808,以及Rm数据字段809。TTT 800可存储在例如控制电路206中的存储器中,所述存储器可由解码与ADVN级216和处理器管线202的其它管级存取。举例来说,较低的管级(例如执行级222)将Rm数据写入到Rm数据字段809中。如下文更详细描述,间接分支指令在获取到TTT条目且所述TTT条目不具有已在TTT表中的有效匹配标记时分配所述TTT条目。标记字段805可为一完整指令地址或其一部分。影响寄存器值的指令检查TTT 800中的有效条目是否有如Rm地址806中指定的匹配Rm字段。如果发现匹配,那么到所述Rm中指定的地址的间接分支指令在TTT表800中具有已建立的条目,例如TTT条目802。图SB是根据本发明的合适地用以提供间接分支指令的分支目标地址的预先通知(ADVN)的第二间接分支预先通知过程850。第二间接分支ADVN过程850以经获取指令流852开始。在决策框854处,做出是否接收到间接分支(BX Rm)指令的确定。如果未接收到BX Rm指令,那么第二间接分支ADVN过程850前进到决策框856。在决策框856处,做出所接收的指令是否影响Rm寄存器的确定。此处做出的确定是所接收的指令是否将更新可能潜在地由BX Rm指令使用的任何寄存器。大体上,影响可由间接分支指令指定的寄存器Rm的任一指令都是通过硬件标注为待检查的可能的候选指令,如下文更详细描述。如果所接收的指令不影响Rm寄存器,那么第二间接分支ADVN过程850前进到决策框854以评估下一接收的指令。返回到决策框856,如果所接收的指令确实影响Rm寄存器,那么第二间接分支 ADVN过程850前进到框858。在框858处,检查TTT 800是否存在有效条目,以查看所接收指令是否将实际上改变BX指令将需要的寄存器。在决策框860处,做出是否在TTT 800中已发现任何匹配的Rm的确定。如果在TTT 800中未发现至少一个匹配的Rm,那么第二间接分支ADVN过程850返回到决策框854以评估下一接收的指令。然而,如果在TTT 800中发现至少一个匹配的Rm,那么第二间接分支ADVN过程850前进到框862。在框862处,递增与条目相关联的上/下计数器。所述上/下计数器指示有多少在运行中的指令将改变所述特定Rm。应注意,当Rm改变指令执行时,递减条目的上/下计数器值808,设定数据有效位807,且将执行的Rm数据结果写入到Rm数据字段809。如果寄存器改变指令无序地执行,那么当提交执行结果以改变处理器状态时,呈编程次序的最新寄存器改变指令取消编程次序较老的指令对Rm数据字段的写入,进而避免了写入之后写入的危险。对于具有无分支条件指令的处理器指令集架构(ISA),无分支条件指令可具有评估为不执行状态的条件。因此,为了评估一条目的上/下计数器值808的目的,评估为不执行的无分支条件指令的目标寄存器Rm可被读取为源操作数。所读取的Rm值具有最新的目标寄存器Rm值。这样,即使不执行具有带有匹配的有效标记的Rm的无分支条件指令,也可用最新值更新Rm数据字段809,且相应地递减上/下计数器值808。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。返回到决策框854,如果所接收的指令是BX Rm指令,那么第二间接分支ADVN过程850前进到框866。在框866处,检查TTT 800是否存在有效条目。在决策框868处,做出在TTT 800中是否发现匹配的标记的确定。如果未发现匹配的标记,那么第二间接分支ADVN过程850前进到框870。在框870处,在TTT 800中建立新条目,其包含将新条目有效位804设定为有效的指示值,将BX的Rm放置于Rm字段806中,清除数据有效位807,以及清除与新条目相关联的上/下计数器。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。返回到决策框868,如果发现匹配的标记,那么第二间接分支ADVN过程850前进到决策框872。在决策框872处,做出条目的上/下计数器是否为零的确定。如果条目的上/下计数器非零,那么存在仍在运行中的Rm改变指令,且第二间接分支ADVN过程850前进到步骤874。在步骤874处,在处理器管线中暂停BX指令直到条目的上/下计数器已经递减到零为止。在框876处,将作为对Rm数据的最后改变的TTT条目的Rm数据用作间接分支BX指令的目标。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。返回到决策框872,如果条目的上/下计数器等于零,那么第二间接分支ADVN过程850前进到决策框878。在决策框878处,做出条目的数据有效位是否等于一的确定。如果条目的数据有效位等于一,那么第二间接分支ADVN过程850前进到框876。在框876处,将TTT条目的Rm数据用作间接分支BX指令的目标。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。返回到决策框878,如果条目的数据有效位不等于一,那么第二间接分支ADVN过程850返回到决策框854以评估下一接收的指令。在过程850中的此点处,存在对响应于所接收Bx指令的许多替代方案。在第一替代方案中,可将TTT条目的Rm数据用作间接分支BX指令的目标,因为BX Rm标记匹配于一有效条目且上/下计数器值为零。在第二替代 方案中,引导处理器管线202根据未采取的路径来获取指令以避免沿着不正确的路径进行获取。由于Rm数据字段中的数据不是有效的,因此甚至不保证Rm数据指向可执行存储器或已经授权进行存取的存储器。沿着循序路径(未采取的路径)的获取对于被准许存取的存储器来说是最可能的。对于前两种替代方案中的任一者可能发生的不正确顺序是在处理器管线的较后的级中发现且处置。在第三替代方案中,弓I导处理器管线202在BX指令之后停止获取以便节省功率且等待BX校正序列重新建立获取操作。图9A说明根据本发明的示范性第二间接分支目标地址(BTA)预先通知(ADVN)电路900。BTA ADVN电路900与图2的处理器复合体200的处理器管线202和控制电路206相关联,且根据第二间接分支ADVN过程850操作。第二间接BTA ADVN电路900包括解码电路902、检测电路904、预先通知(ADVN)电路906,以及具有展示于电路之间的基本控制信号路径的校正电路908。ADVN电路906包含确定电路910、跟踪I电路912和最当前BTA电路914。校正电路908包含跟踪2电路920和正确管电路922。解码电路902对来自图2的指令获取级214的传入指令进行解码。检测电路904监视经解码指令是否有间接分支指令或Rm改变指令。在首次检测到间接分支指令后,ADVN电路906即刻建立新目标跟踪表(TTT)条目,例如图8A的TTT条目802,且识别由检测到的间接分支指令指定的分支目标地址(BTA)寄存器,如图SB的框870处描述。根据框862,在检测到与有效TTT条目和匹配的Rm值相关联的Rm改变指令后即刻递增上/下计数器值808,且当执行Rm改变指令时递减上/下计数器值808。在间接分支指令的连续检测后,ADVN电路906遵循图8B的框872到878描述的操作。校正电路908基于不正确的BTA预先通知而清空管线。在ADVN电路906中,最当前BTA电路914使用例如TTT条目(例如图8A的TTT条目802)来提供间接分支指令(例如BX RO指令607)的BTA的预先通知。ADVN BTA可用以重新引导处理器管线202获取在ADVN BTA处开始的指令以用于推测性执行。在校正电路908中,跟踪2电路920监视处理器管线202的执行级222是否有BXRO指令607的执行状态。如果正确地提供ADVN BTA,那么允许推测性获取的指令在处理器管线中继续。如果未正确地提供ADVN BTA,那么从处理器管线清空推测性获取的指令,且将管线重新引导回到正确的指令序列。还向检测电路904告知不正确的ADVN状态,且响应于此状态,检测电路904可经编程以停止识别用于预先通知的此特定间接分支指令。另外,向ADVN电路906告知不正确的ADVN状态,且响应于此状态,ADVN电路906可经编程以仅允许TTT 800的特定条目的预先通知。图9B说明根据本发明的示范性第三间接分支目标地址(BTA)预先通知(ADVN)电路950。第三间接BTA ADVN电路950包含下一程序计数器(PC)电路952、解码电路954、执行电路956以及目标跟踪表(TTT)电路958,且说明寻址一指令高速缓冲存储器(例如图2的LI指令高速缓冲存储器208)以获取经转发到解码电路954的指令的方面。第三间接BTA ADVN电路950根据第二间接分支ADVN过程850操作。举例来说,解码电路954检测间接分支(例如BX指令)或Rm改变指令,且向TTT电路958通知已检测到BX指令或Rm改变指令且供应适当的信息,例如BX指令的Rm值。TTT电路958也含有上/下计数器,其如图SB的框862处描述般递增或递减以提供上/下计数器值808。执行电路956在执行Rm改变指令后即刻提供Rm数据值和递减指示。执行电路956还取决于预先通知的成功或失败的状态而提供分支校正地址。如框876处描述,选择TTT电路958中的条目,且将所选择条目的Rm数据字段作为目标地址的部分供应到下一 PC电路952。图IOA是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预先通知的方法的代码实例1000。在代码序列1001到1007中,指令A1001、B1003、C1004和D1005与先前描述的相同,且因此不影响分支目标地址寄存器。指令1002是移动RO目标A指令1002,其无条件地将一值从目标A移动到寄存器R0。指令1006是有条件移动RO目标B指令1006,其有条件地执行大约10%的时间。用于确定指令执行的条件可从在如指令集架构中通常指定的各种算术、逻辑和其它功能指令的执行中由处理器设定的条件旗标来形成。这些条件旗标可存储在位于控制逻辑206中的程序可读旗标寄存器或条件代码(CC)寄存器中,所述寄存器也可为程序状态寄存器的部分。间接分支指令BX RO 1007与图4A和4B的先前实例中使用的相同。在代码实例1000中,有条件移动RO目标B指令1006可取决于其是否执行而影响BTA寄存器R0。考虑如下表中所示的两种可能情形
权利要求
1.一种用于改变程序的顺序流程的方法,其包括从由第一指令识别的寄存器检索程序指定的目标地址,其中所述寄存器是在指令集架构中界定;以及在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址,其中所述第二指令经动态地确定为间接分支指令。
2.根据权利要求I所述的方法,其中所述间接分支指令是在所述第一指令之后的下一遇到的间接分支指令。
3.根据权利要求I所述的方法,其中所述间接分支指令是指定匹配由所述第一指令识别的所述寄存器的目标寄存器的下一遇到的间接分支指令。
4.根据权利要求I所述的方法,其进一步包括将所述第一指令插入代码序列中处于所述间接分支之前至少N个程序指令,其中所述 N个程序指令对应于接收所述间接分支的管线级与辨识由所述第一指令识别的所述寄存器的管线级之间的管线级的数目。
5.根据权利要求4所述的方法,其中接收所述间接分支的所述管线级是获取级,且辨识由所述第一指令识别的所述寄存器的所述管线级是执行级。
6.根据权利要求I所述的方法,其进一步包括在遇到对应多个间接分支指令之前接收多个预先通知(ADVN)指令,其中所述第一指令是(ADVN)指令;以及以先入先出堆栈跟踪所述多个(ADVN)指令与所述遇到的对应多个间接分支指令之间的对应关系。
7.根据权利要求I所述的方法,其进一步包括确定存储在分支目标地址寄存器中的值是有效指令地址;以及在对所述间接分支进行解码后即刻从所述分支目标地址寄存器选择所述值以用于识别待获取的下一指令地址。
8.根据权利要求I所述的方法,其进一步包括执行所述间接分支以确定分支目标地址;将所述确定的分支目标地址与所述程序指定的目标地址进行比较;以及当所述确定的分支目标地址与所述程序指定的目标地址不相同时清空处理器管线。
9.根据权利要求I所述的方法,其进一步包括在遇到所述第一指令之后超驰分支预测电路。
10.根据权利要求I所述的方法,其进一步包括将所述指令处理为具有分支历史预测电路的处理器管线中的无操作,所述分支历史预测电路具有用以跟踪在代码区段的执行期间遇到的分支的硬件资源;以及针对超过所述分支历史预测电路可用的所述硬件资源的代码区段启用所述指令。
11.一种用于提供间接分支地址的预先通知的方法,其包括分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址;以及在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。
12.根据权利要求11所述的方法,其进一步包括在第一次通过代码区段时自动识别所述间接分支指令的目标地址寄存器,其中所述识别的目标地址寄存器用以自动识别由所述指令产生的所述最当前目标地址。
13.根据权利要求11所述的方法,其中当对所述间接分支指令进行解码时准备所述下一程序地址。
14.根据权利要求11所述的方法,其进一步包括将所述指令序列中的所述目标地址改变指令移动到所述指令序列中在间接分支指令之前至少N个程序指令的位置,其中N对应于接收所述间接分支的管线级与辨识由所述目标地址改变指令识别的所述寄存器的管线级之间的管线级的数目。
15.根据权利要求14所述的方法,其中接收所述间接分支的所述管线级是获取级,且辨识由所述目标地址改变指令识别的所述寄存器的所述管线级是执行级。
16.根据权利要求11所述的方法,其进一步包括在第一表中在由所述间接分支指令指定的目标地址寄存器条目处加载产生所述最当前目标地址的所述指令的指令地址。
17.根据权利要求16所述的方法,其进一步包括在所述指令地址处检查有效位的关联性存储器中是否有经断言的有效位;以及响应于经断言的有效位而用从执行由所述第一表识别的所述指令得到的值来加载分支目标地址寄存器。
18.根据权利要求17所述的方法,其进一步包括使用存储在所述分支目标地址寄存器中的所述值提供所述分支目标地址。
19.一种用于提供间接分支目标地址的预先通知的设备,其包括寄存器,其用于保持由程序指定为间接分支指令的预先通知(ADVN)间接地址的指令存储器地址;以及下一程序地址选择器电路,其监视以所述寄存器为目标的指令,且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述(ADVN) 间接地址,以用于在推测性执行所述间接分支指令时用作下一程序地址。
20.根据权利要求19所述的设备,其进一步包括解码器,其用以对程序指令进行解码以识别待存储在所述寄存器中的分支目标地址。
21.根据权利要求19所述的设备,其进一步包括处理器管线,其在接收所述间接分支指令的级与辨识所述最当前目标地址的级之间具有N个级,其中所述下一程序地址选择器电路选择在所述间接分支之前至少所述N个级的所述ADVN间接地址。
22.根据权利要求21所述的设备,其中接收所述间接分支指令的所述管线级是获取级,且辨识所述最当前目标地址的所述管线级是执行级。
23.根据权利要求19所述的设备,其中所述ADVN间接地址是基于跟踪表,所述跟踪表存储所述程序的在当前执行循环之前的影响所述间接分支指令的所述分支目标地址的指令的执行状态。
全文摘要
一种处理器实施用于提供间接分支地址的预先通知的设备和方法。自动地识别由指令产生的目标地址。在推测性执行利用最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。所述设备合适地采用寄存器,其用于保持由程序指定为间接分支指令的最当前间接地址的指令存储器地址。所述设备还采用下一程序地址选择器,其从所述寄存器选择所述最当前间接地址作为所述下一程序地址以用于在推测性执行所述间接分支指令时使用。
文档编号G06F9/30GK102934075SQ201180028116
公开日2013年2月13日 申请日期2011年6月28日 优先权日2010年6月28日
发明者詹姆斯·诺里斯·迪芬德尔费尔, 迈克尔·威廉·莫罗 申请人:高通股份有限公司