首页> 中国专利> 用于使用预先通知技术改变程序的顺序流程的方法和设备

用于使用预先通知技术改变程序的顺序流程的方法和设备

摘要

一种处理器实施用于提供间接分支地址的预先通知的设备和方法。自动地识别由指令产生的目标地址。在推测性执行利用最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。所述设备合适地采用寄存器,其用于保持由程序指定为间接分支指令的最当前间接地址的指令存储器地址。所述设备还采用下一程序地址选择器,其从所述寄存器选择所述最当前间接地址作为所述下一程序地址以用于在推测性执行所述间接分支指令时使用。

著录项

  • 公开/公告号CN102934075A

    专利类型发明专利

  • 公开/公告日2013-02-13

    原文格式PDF

  • 申请/专利权人 高通股份有限公司;

    申请/专利号CN201180028116.0

  • 申请日2011-06-28

  • 分类号G06F9/32(20060101);G06F9/30(20060101);G06F9/38(20060101);

  • 代理机构11287 北京律盟知识产权代理有限责任公司;

  • 代理人宋献涛

  • 地址 美国加利福尼亚州

  • 入库时间 2024-02-19 18:28:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-17

    未缴年费专利权终止 IPC(主分类):G06F9/32 授权公告日:20151202 终止日期:20170628 申请日:20110628

    专利权的终止

  • 2015-12-02

    授权

    授权

  • 2013-03-20

    实质审查的生效 IPC(主分类):G06F9/32 申请日:20110628

    实质审查的生效

  • 2013-02-13

    公开

    公开

说明书

技术领域

本发明大体上涉及用于在处理器管线中处理指令的技术,且更具体来说涉及用于产 生间接分支指令的目标地址的早期指示的技术。

背景技术

许多便携式产品,例如手机、膝上型计算机、个人数据助理(PDA)或类似物,需要 使用执行支持通信和多媒体应用的程序的处理器。用于这些产品的处理系统包含处理 器、指令源、输入操作数源以及用于存储执行结果的存储空间。举例来说,指令和输入 操作数可存储在由通用寄存器和多级高速缓冲存储器组成的阶层式存储器配置中,其包 含例如指令高速缓冲存储器、数据高速缓冲存储器和系统存储器。

为了在程序的执行中提供高性能,处理器通常在管线中执行指令。处理器还可使用 推测性执行来获取和执行在预测分支目标地址处开始的指令。如果分支被误预测,那么 必须从管线清空推测性执行的指令,并且在正确的路径地址处重新开始管线。在许多处 理器指令集中,经常有分支到从寄存器的内容导出的程序目的地地址的指令。此指令通 常称为间接分支指令。由于间接分支对寄存器的内容的依赖性,通常难以预测分支目标 地址,因为在每次执行间接分支指令时寄存器可能具有不同的值。由于校正误预测的间 接分支通常需要对间接分支指令的反向跟踪以便在正确的分支路径上获取和执行指令, 因此处理器的性能可能降低。而且,误预测指示处理器不正确地推测性获取和开始在错 误分支路径上的指令处理,从而造成用于处理并不使用的指令以及用于从管线中清空所 述指令的功率增加。

发明内容

在本发明的若干方面中,本发明认识到有利的是使在执行指令时可能发生的误预测 的数目最少以在处理器系统中改善性能且减少功率要求。为此,本发明的实施例适用于 一种用于改变程序的顺序流程的方法。所述方法从由第一指令识别的寄存器检索程序指 定的目标地址,其中所述寄存器是在指令集架构中界定。在遇到第二指令之后将推测性 执行流程改变到所述程序指定的目标地址,其中所述第二指令经动态地确定为间接分支 指令。

本发明的另一实施例针对一种用于提供间接分支地址的预先通知的方法。分析指令 序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址。在推测性执行 利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程 序地址。

本发明的另一方面针对一种用于提供间接分支目标地址的预先通知的设备。所述设 备采用寄存器,其用于保持由程序指定为间接分支指令的预先通知(ADVN)间接地址的 指令存储器地址。所述设备还采用下一程序地址选择器电路,其监视以所述寄存器为目 标的指令,且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最 当前目标地址选择为所述ADVN间接地址,以用于在推测性执行所述间接分支指令时用 作下一程序地址。

从以下具体实施方式和附图将明了本发明的更完整理解以及本发明的另外特征和 优点。

附图说明

图1是其中可有利地采用本发明的实施例的示范性无线通信系统的框图;

图2是根据本发明的支持间接分支指令的分支目标地址的处理器复合体的功能框 图;

图3A是根据本发明的32位预先通知(ADVN)指令的一般格式,其指定具有间接分 支目标地址值的寄存器;

图3B是根据本发明的16位ADVN指令的一般格式,其指定具有间接分支目标地 址值的寄存器;

图4A是根据本发明的用于使用先前间接分支执行的历史的间接分支预测的方法的 代码实例;

图4B是根据本发明的用于间接分支预先通知的方法的代码实例,所述方法使用图 3A的ADVN指令以用于提供间接分支目标地址的预先通知;

图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路;

图6是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预先通 知的方法的代码实例;

图7是根据本发明的第一间接分支预先通知(ADVN)过程,其合适地用于间接分支 指令的分支目标地址;

图8A说明示范性目标跟踪表(TTT);

图8B是根据本发明的第二间接分支预先通知(ADVN)过程,其合适地用于提供间接 分支指令的分支目标地址的预先通知;

图9A说明根据本发明的示范性第二间接分支目标地址(BTA)预先通知(ADVN)电 路;

图9B说明根据本发明的示范性第三间接分支目标地址(BTA)预先通知(ADVN)电 路;以及

图10A和10B是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预 先通知的方法的代码实例。

具体实施方式

现在将参考附图更完整地描述本发明,其中展示本发明的若干实施例。然而,本发 明可以各种形式体现,且不应解释为限于本文陈述的实施例。事实上,提供这些实施例 以使得本发明将为详尽且完整的,且将本发明的范围完整地传达给所属领域的技术人 员。

根据本发明教示的用于被操作或用于实行操作的计算机程序代码或“程序代码”可 初始以高级编程语言来编写,例如C、C++、Smalltalk、TSQL、Perl或各种其它编程语言。通过将高级程序代码转换为原生汇编程序来将以这些 语言中的一者编写的程序编译为目标处理器架构。用于目标处理器架构的程序也可以原 生汇编语言直接编写。原生汇编程序使用机器级二进制指令的指令助记表示。如本文使 用的程序代码或计算机可读媒体称为机器语言代码,例如格式可被处理器理解的目标代 码。

图1说明其中可有利地采用本发明的实施例的示范性无线通信系统100。出于说明 的目的,图1展示三个远程单元120、130和150以及两个基站140。将认识到,常见的 无线通信系统可具有多得多的远程单元和基站。分别包含由组件125A、125C、125B和 125D表示的硬件组件、软件组件或两者的远程单元120、130、150和基站140已经调 适以体现如下文进一步论述的本发明。图1展示从基站140到远程单元120、130和150 的前向链路信号180以及从远程单元120、130和150到基站140的反向链路信号190。

在图1中,将远程单元120展示为移动电话,将远程单元130展示为便携式计算机, 且将远程单元150展示为无线本地回路系统中的固定位置远程单元。举例来说,远程单 元可替代地为手机、寻呼机、对讲机、手持式个人通信系统(PCS)单元、例如个人数据 助理等便携式数据单元,或例如仪表读取装备等固定位置数据单元。尽管图1说明根据 本发明的教示的远程单元,但本发明不限于这些示范性所说明单元。本发明的实施例可 合适地用于具有间接分支指令的任何处理器系统中。

图2是根据本发明的处理器复合体200的功能框图,其支持准备间接分支指令的分 支目标地址的预先通知。处理器复合体200包含处理器管线202、通用寄存器堆(GPRF) 204、控制电路206、L1指令高速缓冲存储器208、L1数据高速缓冲存储器210以及存 储器阶层212。控制电路206包含程序计数器(PC)215和分支目标地址寄存器(BTAR) 219,其如下文更详细描述般相互作用以用于控制包含指令获取级214的处理器管线202 的目的。为了论述的清楚而未展示外围装置(其可连接到处理器复合体)。处理器复合体 200可合适地用于图1的硬件组件125A到125D中以用于执行存储在L1指令高速缓冲 存储器208中的程序代码,利用存储在L1数据高速缓冲存储器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 从L1指令高速缓冲存储器208获取指令以供稍后的级处理。如果指令获取在L1指令高 速缓冲存储器208中未命中,意味着待获取的指令不在L1指令高速缓冲存储器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相关联,例如 可从L1指令高速缓冲存储器208(用于对从L1数据高速缓冲存储器210获得的数据进行 操作)和存储器阶层212可用,或者通过例如输入/输出接口(未图示)而关联。处理器复合 体200还在程序的执行中从L1数据高速缓冲存储器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指令可在具有动态分支历史预测电路的处理器管线中被处理 为NOP,所述动态分支历史预测电路具有足够的硬件资源来跟踪在代码区段的执行期间 遇到的分支且如下文描述针对超过所述动态分支历史预测电路可用的硬件资源的代码 区段启用ADVN指令。而且,在动态分支历史预测电路具有用于预测间接分支目标地址 的不良结果的情况下,ADVN指令可结合动态分支历史预测电路来使用以用于提供间接 分支目标地址的预先通知。举例来说,从动态分支历史预测电路产生的经预测分支目标 地址可由通过使用ADVN指令提供的目标地址超驰。另外,呈现有利的自动间接目标推 断方法以用于提供如下文描述的间接分支目标地址的预先通知。

图4A是根据本发明的用于间接分支预测的方法的代码实例400,所述方法在未遇 到ADVN指令的情况下使用一般历史方法来预测间接分支执行。代码实例400的执行是 参考处理器复合体200来描述。为了此实例的目的,指令A到D401到404可为循序算 术指令集,其基于指令A到D401到404的分析并不影响GPRF 204中的寄存器R0。寄 存器R0由加载R0指令405用用于间接分支指令BX R0 406的目标地址加载。为了此实 例的目的,指令401到406中的每一者经指定为无条件地执行。还假定,加载R0指令 405在L1指令高速缓冲存储器208中可用,使得当指令A401在执行级222中完成执行 时,已在获取级214中获取加载R0指令405。随后获取间接分支BX R0指令406,同 时在解码与ADVN级216中解码加载R0指令405。在下一管线级中,准备加载R0指 令405以经分派用于执行,且解码BX R0指令406。而且,在解码与ADVN级216中, 基于先前间接分支执行的历史而做出BX R0指令406是被取得还是未被取得的预测,且 还预测间接分支的目标地址。对于此实例,BX R0指令406经指定为被无条件地“取得” 且ADVN逻辑电路217仅需要将间接分支目标地址预测为地址X。基于此预测,引导处 理器管线202开始推测性获取从地址X开始的指令,地址X在给定“取得”状态时通 常是从当前指令寻址的重定向。处理器管线202还清空管线中在间接分支BX R0指令 406之后的任何指令,如果这些指令不与在地址X处开始的指令相关联。处理器管线202 继续获取指令直到在执行级中可确定经预测地址X是否经正确预测为止。

在处理指令的同时,可能遇到暂停情形,例如关于加载R0指令405的执行可能发 生的暂停情形。加载R0指令405的执行可在L1数据高速缓冲存储器中存在命中的情况 下无延迟地返回来自L1数据高速缓冲存储器210的值。然而,加载R0指令405的执行 在L1数据高速缓冲存储器210中存在未命中的情况下可能花费大量周期。加载指令可 使用来自GPRF 204的寄存器来供应基地址,且随后在执行级222中将中间值加到基地 址以产生有效地址。所述有效地址经由数据路径232发送到L1数据高速缓冲存储器210。 在L1数据高速缓冲存储器210中的未命中的情况下,必须从可包含例如L2高速缓冲存 储器和主存储器的存储器阶层212获取数据。此外,数据可能在L2高速缓冲存储器中 未命中,从而导致从主存储器获取数据。举例来说,L1数据高速缓冲存储器210中的未 命中、存储器阶层212中的L2高速缓冲存储器中的未命中以及对主存储器的存取可能 需要数百个CPU周期来获取数据。在L1数据高速缓冲存储器未命中之后获取数据所花 费的周期期间,BX R0指令406在处理器管线202中暂停直到运行中操作数可用为止。 所述暂停可视为在读取寄存器级220中或执行级222的开始处发生。

应注意,在具有多个指令管线的处理器中,加载R0指令405的暂停可能并不暂停 在任何其它管线中发生的推测性操作。由于L1 D高速缓冲存储器210中的未命中所造 成的暂停的长度,可能推测性获取大量指令,这在存在间接分支目标地址的不正确预测 的情况下可能显著影响性能和功率使用。可通过使用作为图2的控制电路206的部分的 保持电路来在处理器管线中产生暂停。所述保持电路产生保持信号,其可例如用以选通 管线级寄存器以暂停管线中的指令。对于图2的处理器管线202,可例如在读取寄存器 级中在并非所有输入都可用的情况下激活保持信号,使得管线保持等待完成指令执行所 必要的输入的到达。当所有必要的操作数变为可用时释放所述保持信号。

在未命中的解析后,将加载数据经由路径240发送到作为回写级224的部分的回写 操作。随后将操作数写入到GPRF 204且也可发送到上文描述的转发网络226。现在可 将R0的值与经预测地址X进行比较以确定是否需要清空推测性获取的指令。由于用以 存储分支目标地址的寄存器在每次执行间接分支指令时可能具有不同的值,因此存在将 使用当前预测方法清空推测性获取的指令的高概率。

图4B是根据本发明的用于间接分支预先通知的方法的代码实例420,所述方法使 用图3A的ADVN指令以用于提供间接分支目标地址的预先通知。基于图4A的指令A 到D401到404不影响分支目标地址寄存器R0的先前提到的分析,加载R0指令405 可在指令序列中向上移动以例如在图4B的代码实例中放置于指令A421之后。另外, ADVN R0指令423,例如图3A的ADVN指令300,直接放置于加载R0指令422之后 作为用于间接BX R0指令427的分支目标地址的预先通知的先行辅助。

在图4B的新指令序列421到427流过处理器管线202时,当加载R0指令422在执 行级中时ADVN R0指令423将在读取级220中,且指令D426将在获取级214中。对 于加载R0指令422在L1数据高速缓冲存储器210中命中的情形,R0的值在加载R0 执行结束之前是已知的且与R0值一起经由转发网络226快速转发到读取级,R0值在读 取级220的末尾或在用于ADVN R0指令的执行级的开始之前也是已知的。在间接分支 指令进入解码与ADVN级216之前确定R0值允许ADVN逻辑电路217将确定的R0值 选择为BX R0指令427的分支目标地址而不会有任何额外的周期延迟。应注意,BX R0 指令427在管线中是动态识别的。虽然通常ADVN指定的寄存器(例如此代码实例中的 R0)将保持与间接分支指定的目标地址寄存器相同的地址,但可能遇到异常。在针对此 地址异常的一种方法中,不将ADVN指定的寄存器值与下一遇到的间接分支指令指定的 寄存器值进行比较,且如果选择了不正确的目标地址,那么在管线中稍后会检测到错误 且采取适当动作,例如清空管线。在一不同方法中,将ADVN指定的寄存器值与下一遇 到的间接分支指令指定的寄存器值进行比较,且在找到匹配之前将不针对推测性执行做 出改变,通常情况将是这样。如果未找到匹配,那么管线将如同未遇到ADVN指令那样 操作。

应注意,对于处理器管线202,对于在L1数据高速缓冲存储器210中存在命中的情 况,加载R0指令和ADVN R0指令可能已放置在指令B之后而不会引起任何进一步延 迟。然而,如果在L1数据高速缓冲存储器中存在未命中,那么将起始暂停情形。对于 L1数据高速缓冲存储器210中的未命中的此情况,加载R0和ADVN R0指令将需要基 于管线深度而放置在BX R0指令之前适当数目个未命中延迟周期(如果可能的话)以避免 引起任何进一步延迟。

大体上,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 R0指令来说明,但在遇到任何间接分支之前可例示多 个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 与先前描述的相同,且因此不影响分支目标地址寄存器。两个指令:加载R0指令602 和相加R0、R7、R8指令605影响此实例的分支目标寄存器R0。间接分支指令BX R0 607 与图4A和4B的先前实例中使用的相同。在代码实例600中,即使加载R0指令602和 相加R0、R7、R8指令605影响BTA寄存器R0,相加R0、R7、R8指令605也是影响 BTA寄存器R0的内容的最后指令。

通过跟踪代码序列600的执行模式,自动间接目标推断方法电路可以合理的准确性 提供预先通知:在BX R0指令607进入解码与ADVN级216时R0的最新值是否应用作 ADVN BTA。在一个实施例中,写入到R0的最后的值将在BX R0指令进入解码与ADVN 级216时用作BX R0指令的值。此实施例是基于如下评估:对于与此BX R0指令相关 联的代码序列,写入到R0的最后的值可被估计为正确值历时较高百分比的时间。

图7是根据本发明的第一间接分支预先通知(ADVN)过程700,其合适地用以提供间 接分支指令的分支目标地址的预先通知。第一间接分支ADVN过程700利用最后写入器 表,其可通过寄存器堆编号来寻址或标引,使得与具有32个条目R0到R31的寄存器堆 相关联的最后写入器表将可通过索引值0到31来寻址。类似地,如果寄存器堆具有较 少条目,例如14个条目R0到R13,那么最后写入器表将可通过索引值0到13来寻址。 最后写入器表中的条目中的每一者存储一指令地址。第一间接分支ADVN过程700还利 用分支目标地址寄存器更新器关联性存储器(BTARU),其具有通过指令地址来存取的若 干条目且每条目含有一有效位。在进入第一间接分支ADVN过程700之前,初始化最后 写入器表以使指令地址无效,例如为零,其中通常将不会发现间接分支ADVN代码序列 的指令地址且BTARU条目被初始化为无效状态。

第一间接分支ADVN过程700以经获取指令流702开始。在决策框704处,做出是 否接收到对可能是间接分支指令的目标寄存器的任一寄存器Rm进行写入的指令的确 定。举例来说,在具有14条目寄存器堆(具有寄存器R0到R13)的处理器中,将跟踪对 寄存器R0到R13中的任一者进行写入的指令,作为间接分支指令的可能目标寄存器。 对于监视具有间接分支指令的代码区段的多次通过的技术,可通过在第一次通过时识别 间接分支指令来确定特定Rm。举例来说,在遇到指定相同Rm的间接分支之前接收具 有一个以上Rm改变指令的代码序列。以多次通过过程700来处理此代码序列。在过程 700的第一次通过中,在遇到间接分支指令之前,将最后的Rm改变指令的地址存储在 最后写入器表中的经标引Rm地址处,从而覆写先前Rm改变指令的地址。在遇到间接 分支指令之前在第一次通过时不更新BTAR,因为在第一次通过中并不知道何时已接收 到最后的Rm改变指令。遇到的间接分支指令断言一有效位以指示改变了经指定Rm的 最后指令是将用于存储在经指定Rm中的目标地址的预先通知的有效指令。在第二次通 过过程700中,最后Rm改变指令将引起更新BTAR,且当遇到(例如在解码级中识别出) 间接分支指令时,BTAR可用于分支目标地址的预先通知。

返回到框704,如果所接收的指令不影响Rm,那么第一间接分支ADVN过程700 前进到决策框706。在决策框706处,做出所接收的指令是否为间接分支指令(例如BX Rm指令)的确定。如果所接收的指令不是间接分支指令,那么第一间接分支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。

图8B是根据本发明的合适地用以提供间接分支指令的分支目标地址的预先通知 (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数据 指向可执行存储器或已经授权进行存取的存储器。沿着循序路径(未采取的路径)的获取 对于被准许存取的存储器来说是最可能的。对于前两种替代方案中的任一者可能发生的 不正确顺序是在处理器管线的较后的级中发现且处置。在第三替代方案中,引导处理器 管线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、跟踪1电路 912和最当前BTA电路914。校正电路908包含跟踪2电路920和正确管电路922。

解码电路902对来自图2的指令获取级214的传入指令进行解码。检测电路904监 视经解码指令是否有间接分支指令或Rm改变指令。在首次检测到间接分支指令后, ADVN电路906即刻建立新目标跟踪表(TTT)条目,例如图8A的TTT条目802,且识别 由检测到的间接分支指令指定的分支目标地址(BTA)寄存器,如图8B的框870处描述。 根据框862,在检测到与有效TTT条目和匹配的Rm值相关联的Rm改变指令后即刻递 增上/下计数器值808,且当执行Rm改变指令时递减上/下计数器值808。在间接分支指 令的连续检测后,ADVN电路906遵循图8B的框872到878描述的操作。校正电路908 基于不正确的BTA预先通知而清空管线。

在ADVN电路906中,最当前BTA电路914使用例如TTT条目(例如图8A的TTT 条目802)来提供间接分支指令(例如BX R0指令607)的BTA的预先通知。ADVN BTA 可用以重新引导处理器管线202获取在ADVN BTA处开始的指令以用于推测性执行。

在校正电路908中,跟踪2电路920监视处理器管线202的执行级222是否有BX R0 指令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的L1指令高速缓冲存储器208)以获取经转发到解码电路954的指令的方面。第三 间接BTA ADVN电路950根据第二间接分支ADVN过程850操作。举例来说,解码电 路954检测间接分支(例如BX指令)或Rm改变指令,且向TTT电路958通知已检测到 BX指令或Rm改变指令且供应适当的信息,例如BX指令的Rm值。TTT电路958也 含有上/下计数器,其如图8B的框862处描述般递增或递减以提供上/下计数器值808。 执行电路956在执行Rm改变指令后即刻提供Rm数据值和递减指示。执行电路956还 取决于预先通知的成功或失败的状态而提供分支校正地址。如框876处描述,选择TTT 电路958中的条目,且将所选择条目的Rm数据字段作为目标地址的部分供应到下一PC 电路952。

图10A是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预先通 知的方法的代码实例1000。在代码序列1001到1007中,指令A1001、B1003、C1004 和D1005与先前描述的相同,且因此不影响分支目标地址寄存器。指令1002是移动R0 目标A指令1002,其无条件地将一值从目标A移动到寄存器R0。指令1006是有条件 移动R0目标B指令1006,其有条件地执行大约10%的时间。用于确定指令执行的条件 可从在如指令集架构中通常指定的各种算术、逻辑和其它功能指令的执行中由处理器设 定的条件旗标来形成。这些条件旗标可存储在位于控制逻辑206中的程序可读旗标寄存 器或条件代码(CC)寄存器中,所述寄存器也可为程序状态寄存器的部分。间接分支指令 BX R0 1007与图4A和4B的先前实例中使用的相同。

在代码实例1000中,有条件移动R0目标B指令1006可取决于其是否执行而影响 BTA寄存器R0。考虑如下表中所示的两种可能情形:

移动R0,目标A 有条件移动R0,目标B 1 执行 NOP 2 执行 执行

在代码序列1000中,能够影响间接BTA的最后指令是有条件移动R0目标B指令 1006,且如果其执行,那么上表中的行2、移动R0目标A指令1002的结果将被所执行 的有条件移动R0目标B指令1006覆写。如图10B的代码序列1050中所示,例如仿形 编译器等软件代码仿形工具可插入ADVN R0指令1053,例如图3A的ADVN指令300, 其以第一格式编码以在移动R0目标A指令1052之后直接执行而无依赖性。当第一格式 ADVN R0指令1053进入执行级时,将此时的目标地址寄存器R0的值用作BX R0指令 的间接地址,其将允许推测性获取在大约90%的时间中为正确的。

替代地,ADVN R0指令1053可经编码以取决于跟随ADVN R0指令的有条件目标 地址改变指令(例如,有条件移动R0目标指令1057)而暂停其执行。当暂停编码的ADVN R0指令1053进入执行级时,此时目标地址寄存器R0的值未确定,且当遇到间接分支 指令时的推测性获取暂停直到有条件目标地址改变指令执行为止。如果有条件目标地址 改变指令修改目标地址,那么经更新间接分支目标地址用于推测性获取。如果目标地址 改变指令未修改目标地址,那么存储在R0中的最新间接分支目标地址值用于推测性获 取。应注意,ADVN指令格式300内的条件代码字段304或其它位字段可用于对ADVN 指令的此类操作进行编码。如果有条件移动R0目标指令1057的执行百分比是90%未执 行且10%执行,那么可为有利的是对ADVN R0指令1053进行编码以无依赖性地执行, 因为对于此情形,ADVN R0指令1053可在间接分支指令1058之前足够早地放置于程 序指令流中以有利地改善性能。替代地,如果执行百分比预期不同,例如50%和50%, 那么可能较有利的是对ADVN R0指令进行编码以取决于根据跟随ADVN R0指令的有 条件目标地址改变指令确定结果而暂停其执行。

替代地,第二间接BTA ADVN电路900自动响应于影响寄存器R0的最后指令。举 例来说,在90%的时间使用移动R0目标A指令1002的结果,且在10%的时间使用有 条件移动R0目标指令1006的结果。应注意,90%和10%的执行百分比是示范性的,且 可能受到其它处理器操作影响。在不正确的预先通知的情况下,图9A的校正电路908 可操作以响应于所述不正确的预先通知。

虽然在用于处理器系统中的说明性实施例的上下文中揭示本发明,但将认识到,所 属领域的技术人员可采用与以上论述以及所附权利要求书一致的广泛多种实施方案。举 例来说,用于提供间接分支目标地址的预先通知的ADVN指令方法以及自动间接目标推 断方法(例如第二间接BTA ADVN电路900)可一起使用。ADVN指令可由编程人员或软 件工具(例如,仿形编译器)插入代码序列中,其中可使用此软件方法获得间接分支目标 地址通知的高置信度。对于具有ADVN指令的代码序列,在检测到ADVN指令后即刻 超驰自动间接目标推断方法电路。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号