CN1397880A - 附有第二预测装置的假想分支目标地址高速缓存 - Google Patents

附有第二预测装置的假想分支目标地址高速缓存 Download PDF

Info

Publication number
CN1397880A
CN1397880A CN02118556A CN02118556A CN1397880A CN 1397880 A CN1397880 A CN 1397880A CN 02118556 A CN02118556 A CN 02118556A CN 02118556 A CN02118556 A CN 02118556A CN 1397880 A CN1397880 A CN 1397880A
Authority
CN
China
Prior art keywords
branch
instruction
prediction
address
destination address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN02118556A
Other languages
English (en)
Other versions
CN1260646C (zh
Inventor
葛兰·亨利
汤玛斯·麦当劳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
INTELLIGENCE FIRST CO
Original Assignee
INTELLIGENCE FIRST CO
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by INTELLIGENCE FIRST CO filed Critical INTELLIGENCE FIRST CO
Publication of CN1397880A publication Critical patent/CN1397880A/zh
Application granted granted Critical
Publication of CN1260646C publication Critical patent/CN1260646C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

Abstract

本发明涉及一种具有一主要(primary)预测装置与一次要(secondary)预测装置的分支预测装置,该次要预测装置依据所译码分支指令的类型选择性地覆盖该主要预测装置。主要预测装置中的分支目标地址高速缓存在译码指令前,依据一指令高速缓存的提取地址假想地预测一分支目标地址与方向,若该假想方向预测会被采用,处理器即分支至该假想目标地址。在流水线中稍后,译码逻辑译码指令并确定分支指令类型,像是分支指令是否为条件分支、返回指令、程序计数器相关类型的分支、间接分支等等。依照分支的类型,若主要与次要预测不相匹配,处理器即根据次要预测进行分支,而覆盖掉根据主要预测所采用的分支。

Description

附有第二预测装置的假想分支目标地址高速缓存
相关申请案的交互参照
1 本申请案与下列美国专利申请有关,具有相同的申请日与申请人。通过完整地参考每个申请案,可用于任何目的将其纳入本申请案中:
    Docket # 专利名称
    CNTR:2021 假想分支目标地址高速缓存
    CNTR:2022 用于侦测与更正错误的假想分支目标地址高速缓存分支之装置、系统及方法
    CNTR:2023 假想混合分支方向预测装置
    CNTR:2052 附有由第二预测装置依据分支指令类型进行的选择性覆盖的假想分支目标地址高速缓存
    CNTR:2062 依据指令高速缓存的快取线选取储存于一假想分支目标地址高速缓存的多个目标地址其中之一的装置及方法
    CNTR:2063 在假想分支目标地址高速缓存中置换目标地址的装置及方法
技术领域
2 本发明涉及微处理器(microprocessor)的分支预测(branchprediction)的技术领域,尤指分支目标地址(branch target address)的快取技术,特别涉及一种附有由第二预测装置依据分支指令类型进行的选择性覆盖的假想分支目标地址高速缓存。
背景技术
3 计算机指令一般都储存于内存内可寻址的相连位置。中央处理单元(Central Processing Unit,CPU)或处理器由相连的内存位置提取这些指令,并加以执行。CPU从内存每提取一个指令,其内的程序计数器(program counter,简称PC)或指令指针(instruction pointer,简称IP)就会递增,使其内含序列(sequence)中下个指令的地址,此即为下个循序指令指针(next sequential instruction pointer,简称NSIP)。指令的提取、程序计数器的递增以及指令的执行便通过内存呈线性持续进行,直到遇到程控指令(program control instruction)为止。
4 程控指令也称为分支指令(branch instruction),在执行时会改变程序计数器内的地址,并改变控制的流程。换言之,分支指令指定了改变程序计数器内容的条件。因执行一分支指令使程序计数器的值改变,会导致指令执行顺序的中断。这是数字计算机的一项重要特征,因为它提供对程序执行流程的控制,以及分支至程序的不同部分的能力。程控指令的例子包括跳转(jump)、条件跳转(conditional jump)、调用(call)以及返回(return)。
5 跳转指令使CPU无条件地将程序计数器的内容改变至一特定值,这个值就是程序要继续执行的指令所在的目标地址。条件跳转指令使CPU去测试一状态缓存器(status register)的内容,或者可能比较两个值,而后基于测试或比较的结果,不是继续循序执行就是跳转至一新地址,称为目标地址。调用指令使CPU无条件地跳转至一新目标地址,而且储存程序计数器的值以使CPU可返回至先前离开的程序位置。返回指令使CPU去撷取程序计数器于前次调用指令执行时所存的值,并使程序流程返回至所撷取的指令地址。
6 对早期的微处理器而言,程控指令的执行并不会造成处理上显着的延迟,因为这些微处理器被设计为一次只执行一个指令。如果所执行的指令是程控指令,在执行完毕之前,微处理器会知道它是否要分支,而如果是的话,它会知道分支的目标地址为何。因此,不论下个指令是循序的,或是分支的结果,皆会被提取和执行。
7 现代的微处理器则非如此单纯。相反地,对现代的微处理器来说,在微处理器的不同区块或流水线阶段(pipeline stage)内同时处理数个指令乃很平常的事。Hennessy与Patterson将流水线化(pipelining)定义为“一种多个指令得以重迭执行的实作技术。”(引述自 Computer Architecture:A Quantitative Approach,2nd edition,by John L.Hennessy and David A.Patterson,Morgan Kaufmann Publishers,SanFrancisco,CA,1996)作者接着对流水线化做了下列精彩的说明:
[0008]“一个流水线就像是条装配线。在汽车的装配线上,有许多步骤,每个步骤对汽车的制造都有所贡献。每个步骤与其它步骤同时并行,然而是在不同的汽车上进行。在一计算机流水线中,每个步骤完成一个指令的部分,就像装配线,不同的步骤并行地完成不同指令的不同部分。每个这些步骤称为一管道阶段(pipe stage)或管道区段(pipe segment)。这些阶段一个连接着下一个,形成一个管道——指令从一端进入,历经这些阶段,然后从另一端出去,就像汽车在装配线上一样。”
9 因此,当指令被提取时,就被导入流水线的一端。指令于微处理器中历史流水线阶段,直到执行完毕。在这种流水线化的微处理器中,一分支指令是否会改变程序流程,通常都得等它到达流水线之后期阶段才能得知。然而在这之前,微处理器已经提取了其它指令,且正于流水线的早期阶段执行。如果一分支指令改变了程序流程,所有在这分支指令之后进入流水线的指令都必须被丢弃。此外,则必须提取此分支指令的目标地址上的指令。丢弃已在执行中的指令及提取目标地址上的指令,会造成微处理器在处理上的延迟,称为分支惩罚(branch penalty)。
10 为减轻这种延迟问题,许多流水线化的微处理器在流水线的一早期阶段使用分支预测机制来预测分支指令。分支预测机制预测分支指令的结果或方向,即是否要进行分支。分支预洲机制也预测分支指令的分支目标地址,即分支指令所要分支到的指令的地址。处理器接着就分支至所预测的分支目标地址,即依据分支预测提取后续的指令,这会比没有分支预测时来得早,因而若确定要进行分支,因此便降低了惩罚的可能性。
11 这种用来快取先前所执行分支指令的目标地址的分支预测机制,称为分支目标地址高速缓存(branch target address cache,简称BTAC)或者分支目标缓冲器(branch target buffer,简称BTB)。在一简单的BTAC或BTB中,当处理器对一分支指令进行译码后,处理器便提供分支指令的地址给BTAC。若该地址命中BTAC且预测分支会进行,处理器就可以利用BTAC中的快取目标地址开始提取目标地址的指令,而非下个循序(sequential)地址的指令。
12 相较于只预测是否采用分支的预测装置,像是分支历史表(branchhistory table,简称BHT),BTAC的好处是除了确定是否遇到一分支指令所需的时间外,它节省了计算目标地址所需的时间。典型的做法是分支预测数据(例如被采用/不被采用(taken/not taken))随着目标地址皆储存于BTAC。BTAC运用于流水线的指令译码阶段,这是因为处理器必须先判断分支指令是否存在。
13 处理器使用BTB的一个例子是Intel Pentium II与Pentium III处理器。现请参阅图1,其绘示Pentium II/III处理器100相关部分的方块图。处理器100包括一BTB 134,用来快取分支目标地址。处理器100从一指令高速缓存(instruction cache)102提取指令,该指令高速缓存102快取了指令108与前译码(pre-decoded)分支预测数据104。前译码分支预测数据104可能包括像是指令类型或指令长度这样的讯息。指令从指令高速缓存102提取,并送到指令译码逻辑(instructiondecode logic)132,由其来译码或解译指令。
14 一般是从下个循序提取地址112来提取指令。该下个循序提取地址112是由递增装置(incrementer)118将现行指令高速缓存102的提取地址122直接加上一指令高速缓存102的快取线的大小所得。然而,如果一分支指令已由指令译码逻辑132译码,接着控制逻辑(controllogic)114便选择性地控制一多工器(multiplexer)116选取BTB 134所提供的分支目标地址,作为指令高速缓存102的提取地址122,而非选取下个循序提取地址112。控制逻辑114根据指令高速缓存102提供之前译码数据104以及BTB 134预测该分支指令是否会被采用(依用来检索BTB 134的指令指针138而定),来选取指令高速缓存102的提取地址122。
15Pentium II/III在检索BTB 134时,并非通过分支指令本身的指令指针,而是利用先于被预测的分支指令的指令的指令指针138来进行。这使得BTB 134在分支指令被译码时,就能查询目标地址136。否则,在分支指令译码后,处理器100必须再等待BTB 134的查询,才能进行分支,这样便多了此延迟的分支惩罚。一旦分支指令被指令译码逻辑132译码,且处理器100知道目标地址136的产生是基于确定有分支指令的存在,处理器100才会分支到BTB 134根据指令指针138索引所提供的目标地址136。
16 另一个使用BTAC的例子是AMD Athlon处理器。现请参阅图2,其绘示Athlon处理器200相关部分的方块图。处理器200包括与图1PentiumII/III编号类似的组件。Athlon处理器200将其BTAC整合进指令高速缓存202中。也就是,指令高速缓存202除了指令数据108与前译码分支预测数据104之外,还快取了分支目标地址206。对于每个指令字节对(instruction byte pair),指令高速缓存202保留了两个位作为预测分支指令的方向之用。指令高速缓存202在一快取线中,相当于每16个字节的指令即保留两个分支目标地址的空间。
17 从图2可以看出,指令高速缓存202是由提取地址下个循序提取地址来作索引。因BTAC已整合进指令高速缓存202,所以也是由提取地址122来作索引。因此,指令高速缓存202的一快取线若有一命中发生,就可确定快取分支目标地址对应至存在于被检索的指令高速缓存202快取线中一分支指令。
18 虽然现有的方法改进了分支预测,但仍有缺点。前述两种现有方法的一个缺点是,指令前译码数据以及Athlon例子中的分支目标地址大幅增加了指令高速缓存的大小。据推测,对Athlon而言,分支预测数据可能使指令高速缓存的大小加倍。此外,Pentium II/III BTB为每个分支指令储存了相当大量的分支历史数据,用以预测分支方向,因而也增加了BTB的大小。
19Athlon的整合式BTAC的一个缺点是,将BTAC整合进指令高速缓存会使空间的使用缺乏效率。也就是,整合式的指令高速缓存/BTAC对于分支指令以及非分支指令,皆须快取其分支指令数据,因而占用过多储存空间。在Athlon指令高速缓存中,许多由额外的分支预测数据所使用的空间是浪费掉的,这是因为指令高速缓存中分支指令的集中度相当低。例如,一特定的指令快取线中可能未包括任何分支,因此快取线中所有储存目标地址与其它分支预测数据的空间就没用到而浪费掉了。
20Athlon整合式的BTAC的另一个缺点是,设计目标间的冲突。也就是,关于指令高速缓存的大小,除了分支预测机制的设计目标外,可能有其它不同的设计目标会对此加以规定。以快取线而论,要求BTAC的大小要与指令高速缓存相同,是Athlon架构所固有的,但可能无法理想地达到两组设计目标。例如,可能选定了指令高速缓存的大小,以达成一特定的快取命中率(cache-hit ratio)。然而,情况可能是,用比较小的BTAC,就可能达成所要的分支目标地址预测率(prediction rate)。
21 再者,因为BTAC是整合在指令高速缓存中,获得快取分支目标地址所需的数据存取时间必然相同于获得快取指令字节。Athlon的例子中,指令高速缓存相当大,存取时间可能会相当长。较小的、非整合式BTAC的数据存取时间可能比整合式的指令高速缓存/BTAC要明显减少。
22 由于Pentium II/III BTB并未整合在指令高速缓存中,PentiumII/III的方法不会遭遇前述Athlon整合式指令高速缓存/BTAC的问题。然而,由于在检索Pentium II/III BTB时,乃利用一已译码指令的指令指针,而非指令高速缓存的提取地址,所以Pentium II/III的解决方案于进行分支时可能无法像Athlon解决方案那样早,因此可能也无法那样有效地减少分支惩罚。Pentium II/III解决方案处理这个问题的方式是,使用一先前指令或先前指令群的指令指针,而非物理的分支指令指针,来检索BTB,如前所述。
23 然而,Pentium II/III方法的一个缺点是,使用先前指令的指令指针而非物理的分支指令指针,会牺牲掉一些分支预测的准确度。准确度的降低,一部份是由于分支指令在程序中可能经由多个指令路径遭遇到。也就是,多个先于分支指令的指令可能因相同的分支指令而快取于BTB中。因此,为了这样一个分支指令,必须消耗掉BTB中多个项目(entry),于是就减少了BTB中可快取的分支指令总数。所用的先于分支指令的指令数量愈多,可到达分支指令的路径也愈多。
24 除此之外,由于使用一先前的指令指针造成可能有多个路径到达同一个分支指令,Pentium II/III BTB中的方向预测装置可能需要更长的时间来“暖机”(warm up)。Pentium II/III BTB保持着分支历史数据,用以预测分支的方向。当一新的分支指令被引入处理器且快取住,到达该分支指令的多个路径可能会使分支历史在更新时,变得比只有单一路径到达该分支指令的情形还慢,造成预测较不准确。
25 因此,我们所需要的是,一种能有效利用芯片固有资源(chip realestate),又能在流水线早期就提供准确分支的分支预测装置,以减少分支惩罚。
发明内容
26 本发明提供一种分支预测方法及装置,能有效利用芯片固有资源,又能在流水线早期就提供准确的分支,以减少分支惩罚。于是,为达到前述目的,本发明的一项特征是,在一处理器中提供一种分支预测装置(branch prediction apparatus),该处理器包括地址选择逻辑(addressselection logic),以提供一提取地址至一指令高速缓存,该提取地址用来选取指令高速缓存的快取线。该分支预测装置包括第一与第二分支预测装置(branch predictor),提供一分支指令的第一与第二目标地址预测至地址选择逻辑。该分支预测装置也包括指令译码逻辑,以接收并译码分支指令,且产生分支指令的一类型。该分支预测装置亦包括分支控制逻辑(branch control logic),以控制地址选择逻辑选取第一预测作为提取地址。第一预测选取指令高速缓存一第一快取线。分支控制逻辑接着依据分支指令的类型,选择性地控制地址选择逻辑选取第二预测作为提取地址。第二预测选取指令高速缓存的一第二快取线。
27 另一方面,本发明的一项特征是,在一处理器中提供一种分支预测装置。该分支预测装置包括第一与第二分支预测装置,对一分支指令作第一与第二预测。该分支预测装置也包括比较逻辑(comparison logic),对应于第一与第二分支预测装置,提供第一与第二预测的比较。该分支预测装置亦包括指令译码逻辑,以译码分支指令,并产生分支指令的一类型。该分支预测装置亦包括控制逻辑,对应于指令译码逻辑,使处理器依第一预测进行分支。控制逻辑基于分支指令的类型与比较的结果,以第二预测选择性地覆盖(override)第一预测。
28 另一方面,本发明的一项特征是,提供一种流水线化处理器。该处理器包括一假想(speculative)分支预测装置,用以对分支指令作假想预测。该处理器亦包括控制逻辑,对应于该假想分支预测装置,依据该假想预测使处理器进行分支。该处理器也包括指令译码逻辑,以译码指令,并产生分支指令的一类型。该处理器也包括一非假想分支预测装置,对应于指令译码逻辑,用以对分支指令作一非假想预测。控制逻辑接着依据该非假想预测与分支指令的类型,选择性地使处理器进行分支。
29 另一方面,本发明的一项特征是,提供一种流水线化处理器。该处理器包括一分支目标地址高速缓存,用以在译码一指令前提供该指令的一假想目标地址。该处理器亦包括一目标地址计算器(target addresscalculator),用以在译码该指令后计算该指令的一非假想目标地址。该处理器也包括一比较器,对应于该分支目标地址高速缓存及该目标地址计算器,用于比较假想与非假想目标地址。该处理器分支至该假想目标地址。若假想与非假想目标地址不相匹配,且该指令的类型属于一第一指令类型集合,则该处理器接着分支至非假想目标地址。
30 另一方面,本发明的一项特征是,提供一种流水线化处理器。该处理器包括一分支目标地址高速缓存,用以提供一假想方向,指出一假设的条件分支指令是否将被采用。该假想方向是在译码该假设的条件分支指令前便已提供。该处理器亦包括一分支历史表,以提供该指令的一非假想方向。该非假想方向是在译码该假设的条件分支指令后才提供。该处理器也包括一比较器,对应于该分支目标地址高速缓存及该分支历史表,用以比较假想与非假想方向。若假想与非假想方向不相匹配,处理器便分支至该指令后一下个循序指令指针(NSIP),如果该非假想方向指出该指令将不被采用的话。
31 另一方面,本发明的一项特征是,提供在一流水线化处理器中用以分支的一种方法。此方法包括产生一分支指令的一假想目标地址,将处理器分支至该假想目标地址,以及在该分支后译码该分支指令。此方法亦包括在译码后产生该分支指令的一非假想目标地址,以及确定该分支指令的一分支类型。此方法也包括确定假想与非假想目标地址是否匹配,以及若假想与非假想目标地址不相匹配,即依据该分支类型,选择性地分支至非假想目标地址。
32 本发明的一项优点是,使早期的假想分支得以进行,而不需先译码可能的分支指令,同时也通过使用依对该指令的分支指令类型的译码而产生的更正确的预测(基于译码的(decoded-based)预测一般更为正确),降低了错误的早期假想分支预测的负面影响。
33 本发明的其它特征与优点,在考察本说明书其余部分与附图后,将可更加明白。
附图说明
图1  为Pentium II/III处理器先前技术的相关部分方块图。
图2  为Athlon处理器先前技术的相关部分方块图。
图3  为依本发明的流水线化微处理器的方块图。
图4  为依本发明图3处理器的假想分支预测装置。
图5  是图4的指令高速缓存的方块图。
图6  为依本发明图4分支目标地址高速缓存(BTAC)的方块图。
图7  为依本发明图4BTAC的图6项目的格式的方块图。
图8  为依本发明的图4假想分支预测装置的运作的流程图。
图9  为依本发明的图4假想分支预测装置使用图8步骤的一运作范例的方块图。
图10  为依本发明的图4假想分支预测装置侦测与更正错误的假想分支预测的运作流程图。
图11  为依本发明列举的程序代码片段及一表格,为说明图10假想分支预测错误的侦测与更正的一范例。
图12  为依本发明的图4分支预测装置包括一混合假想分支方向预测装置(hybrid speculative branch direction predictor)的另一具体实施例的方块图。
图13  为图4的双调用/返回堆栈(dual call/return stacks)的运作流程图。
图14  为说明图4的分支预测装置选择性地以非假想分支预测来覆盖(override)假想分支预测,用来改进本发明的分支预测准确度的运作流程图。
图15  为依本发明的用以进行图4BTAC中目标地址置换工作的装置的方块图。
图16  为依本发明图15装置的一运作方法的流程图。
图17  为依本发明的另一具体实施例绘示图15装置的一运作方式的流程图。
图18  为依本发明的另一具体实施例绘示的用以进行图4BTAC中目标地址置换动作的装置方块图。
图19  为依本发明的另一具体实施例绘示的用以进行图4BTAC中目标地址置换动作的装置方块图。图号说明:
100 PentiumII/III处理器    102  指令高速缓存
104  前译码分支预测数据    108  指令数据
112  下个循序提取地址      114  控制逻辑
116  多工器                118  递增装置
122  提取地址              132  指令译码逻辑
134  分支目标缓冲器        136  分支目标地址
138  指令指针              200  Athlon处理器
202  指令高速缓存          206快取分支目标地址
300  流水线化微处理器      302  I-阶段
304  B-阶段                306  U-阶段
308  V-阶段                312  F-阶段
314  X-阶段                316  R-阶段
318  A-阶段                322  D-阶段
324  G-阶段                326  E-阶段
328  S-阶段                332  W-阶段
342  指令缓冲器            344  F-阶段指令序列
346  X-阶段指令序列        352  假想分支目标地址
353  假想返回地址          354  非假想分支目标地址
355  非假想返回地址        356  解析目标地址
400  假想分支预测装置
402  假想分支目标地址高速缓存(BTAC)
404  控制逻辑              406  假想调用/返回堆栈
408  预测检查逻辑          412  非假想分支方向预测装置
414  非假想调用/返回堆栈   416  非假想目标地址计算器
418  比较器                422  多工器
424  储存多工化/缓存器     426  递增装置
428  比较器                432  指令高速缓存
434  加法器                436  指令格式化与译码逻辑
438  假想分支(SB)位        442  更新信号
444  非假想分支方向预测    446  BEG位
446A  A项目的BEG位         446B  B项目的BEG位
448  LEN位                 452  命中信号
454  假想分支数据(SBI)     456  ERR信号
466  下个循序指令指针(NSIP)
468  现行指令指针(CIP)      472  控制信号
474  比较器418的输出        476  比较器428的输出
478  控制信号               481  解析分支方向(DIR)
482  控制信号               483  控制信号
484  信号                   485  比较器489的输出
486  FULL信号               487  比较器497的输出
488  返回地址               489  比较器
491  假想返回地址           492  指令译码数据
493  指令字节               494  指令字节快取线
495  提取地址               496  指令字节
497  比较器
498  储存多工化/缓存器424的输出
499  下个循序提取地址
502  转换参照缓冲器(TLB)
504  标志数组                  506  数据数组
508  比较器                    512  物理分页号码
514  物理标志                   518  命中信号
602  BTAC 402的项目             602A 项目602的A边
602B 项目602的B边               604  比较器
606  路选择多工器               608  A/B选择多工器
612  数据数组                   614  标志数组
616  标志                       618  控制信号
622  A/B选择信号                624  A项目
626  B项目                      702  VALID位
702A A项目的VALID位
702B B项目的VALID位       704  CALL位
706  RET位                708  WRAP位
712  分支方向预测数据(BDPI)
714  分支目标地址             722  T/NT字段
722A A项目的T/NT字段          722B B项目的T/NT字段
724 SELECT位
802--834 假想分支的运作步骤
1002--1054 侦测与更正错误的假想分支预测的步骤
1100 依本发明列举的程序代码实例片段及一表格
1200 混合假想分支方向预测装置
1202 分支历史表(BHT)        1204异或逻辑
1206 全域分支历史缓存器     1208多工器
1212 分支方向结果           1214信号
1216 异或逻辑1204的输出
1218 更新信号                 1222 T/NT_A/B位
1224  T/NT位
1302--1326双调用/返回堆栈的运作步骤
1402--1432 BTAC 402选择性地以非假想分支预测来覆盖假想分支预
      测的运作步骤
1502  LastWritten缓存器     1504 A/B LRU位
1506多工器                  1512更新IP
1514信号                    1516读/写控制信号
1602--1646 A/B项目置换方法的步骤
1716--1726另一实施例中A/B项目置换方法的衍生步骤
1812额外的数组
1902含LastWritten值与LastWrittenPrev值的缓存器
1928信号
具体实施方式
53现请参阅图3,其绘示本发明的一流水线化微处理器300的方块图。处理器流水线300包括阶段302至阶段332。
54第一阶段是I-阶段302,或称指令提取阶段(instruction fetchstage)。在I-阶段302,处理器300提供提取地址至一指令高速缓存432(见图4),以提取指令供处理器300执行。指令高速缓存432在关于图4的部分时会更加详细地说明。在一具体实施例中,此指令高速缓存432是一双周期(two-cycle)高速缓存。B-阶段304是指令高速缓存432的存取的第二阶段。指令高速缓存432提供其数据至U-阶段306,在此阶段数据被闩锁住(latched)。U-阶段306提供指令高速缓存的数据至V-阶段308。
55在本发明中,处理器300还包括一BTAC 402(见图4),在其余图标的部分会详细说明。BTAC 402并未整合在指令高速缓存432。然而,在I-阶段302,BTAC 402是与指令高速缓存432通过使用指令高速缓存432的提取地址495来并行存取的(见图4),从而致能相当快速的分支以减少分支惩罚。BTAC 402提供一假想分支目标地址352,而该地址则被提供至I-阶段302。处理器300选择性地选取目标地址352作为指令高速缓存432提取地址,以达成分支至假想目标地址352,这在其余图标的部分会详加说明。
56从图3可以方便地看出,在U-阶段306,由BTAC402所提供的分支目标地址352能使处理器300在流水线300的相当早期就进行分支,如此仅产生一双周期的指令泡沫(instruction bubble)。即,若处理器300分支至假想目标地址352,只有两个阶段的指令必须被清除。换言之,在两个周期内,典型的情况下,于U-阶段306就可得知分支的目标指令,即,如果这些目标指令存在于指令高速缓存432中。
57在多数情况下,双周期的指令泡沫够小,可以由一指令缓冲器342、F-阶段指令序列344及/或X-阶段指令序列346来加以吸收,此将说明于后。因此,在许多情形下,假想BTAC 402使处理器300能达到零惩罚的分支。
58处理器300还包括一假想调用/返回堆栈(speculativecall/return stack)406(见图4),在关于图4、图8与图13的部分有详细说明。假想调用/返回堆栈406与假想BTAC 402协同运作,以产生一假想返回地址353,即,提供至I-阶段302的返回指令的目标地址。处理器300选择性地选取假想返回地址353作为指令高速缓存432提取地址,以达成分支至假想返回地址353,就如关于图8部分所详细说明的。
59在V-阶段308,指令被写入指令缓冲器342。指令缓冲器342暂存指令以提供至F-阶段312。V-阶段308亦包括译码逻辑,以提供关于指令字节的数据给指令缓冲器342,像是x86前置(prefix)与mod R/M数据,以及指令字节是否为分支运算码值(branch opcode value)。
60 F-阶段312,或称指令格式化阶段(instruction format stage)312,包括指令格式化与译码逻辑436(见图4)以格式化指令。最好(preferably)处理器300是一x86处理器,其指令集(instruction set)可容许不同长度的指令。指令格式化逻辑436从指令缓冲器342接收指令字节流(stream),并将该指令字节流解析成分离的字节群,每个群构成一x86指令,尤其还提供每个指令的长度。
61 F-阶段312也包括分支指令目标地址计算逻辑(branchinstruction target address calculation logic)416,依据一指令译码产生一非假想分支目标地址354,而不是假想地依据指令高速缓存432提取地址来产生,如在I-阶段302 BTAC 402所作的。F-阶段312亦包括一调用/返回堆栈414(见图4),依据一指令译码产生一非假想返回地址355,而不是假想地依据指令高速缓存432提取地址来产生,如在I-阶段302 BTAC 402所作的。F-阶段312非假想地址354与355被送至I-阶段302。处理器300选择性地选取F-阶段312非假想地址354或355作为指令高速缓存432提取地址,以达成分支至地址354或355两者之一,就如下文所详细说明的。
62 F-阶段指令序列344接收格式化的指令。格式化指令由F-阶段指令序列344送至X-阶段314中一指令转换器(instruction translator)。
63 X-阶段314,或称转换阶段314,指令转换器将x86巨指令(macroinstruction)转换成微指令(microinstruction),让其余的流水线阶段可加以执行。X-阶段314将转换过的微指令送至X-阶段指令序列346。
64 X-阶段指令序列346将转换过的微指令送至R-阶段316,或称缓存器阶段316。R-阶段316包括使用者可见(user-visible)的x86缓存器集合,以及非使用者可见的缓存器。微指令的指令操作数(operand)存于R-阶段316缓存器,供流水线300之后续阶段执行微指令。
65 A-阶段318,或称地址阶段(address stage)318,包括地址产生逻辑(address generation logic),从R-阶段316接收操作数与微指令,并产生微指令所需的地址,像是用以加载/储存的内存地址。
66 D-阶段322,或称数据阶段(data stage)322,包括存取数据的逻辑,该数据由A-阶段318产生的地址所指定。特别是,D-阶段322包括一数据高速缓存,用来快取处理器300内从系统内存而来的数据。在一具体实施例中,数据高速缓存是双周期高速缓存。G-阶段324是数据高速缓存存取的第二阶段,而在E-阶段326,可取得数据高速缓存的数据。
67E-阶段326,或称执行阶段(execution stage)326,包括执行逻辑(execution logic),像是算数逻辑单元(arithmetic logic unit),依据先前阶段提供的数据及操作数执行微指令。特别是,E-阶段326会产生BTAC 402指出一返回指令可能存在于由提取地址495指定的指令高速缓存432快取线中所有分支指令的解析(resolved)目标地址356。即,E-阶段326目标地址356被认为是所有分支指令的正确目标地址,所有预测的目标地址必须与其匹配。此外,E-阶段326产生一所有分支指令的解析方向(DIR)481(见图4)。
68S-阶段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的部分所描述的。
69W-阶段332,或称回写阶段(write-back stage),将S-阶段328处理的结果回写入R-阶段316缓存器,用来更新处理器300的状态。
70指令缓冲器342、F-阶段指令序列344以及X-阶段指令序列346除了别的功能外,还能将分支对于处理器300每个指令值的脉冲所造成的冲击减至最小。
71现请参阅图4,其绘示依本发明图3处理器300的一假想分支预测装置400。处理器300包括指令高速缓存432,以快取来自系统内存的指令字节496。指令高速缓存432由提取地址总线上的提取地址495来寻址,对指令高速缓存432内一快取线作检索。最好(preferably)提取地址495包括一32位的虚拟地址。即,提取地址495并非指令的物理内存地址(physical memory address)。在一具体实施例中,虚拟提取地址495是一x86线性(linear)指令指针。在一具体实施例中,指令高速缓存432具有32个字节的宽度;因此,只用到提取地址495之前27个位来检索指令高速缓存432。一选定的指令字节快取线494则由指令高速缓存432输出。指令高速缓存432在接下来图5部分会更详细地说明。
72现请参照图5,其绘示图4指令高速缓存432的一具体实施例的方块图。指令高速缓存432包括用来将图4的虚拟提取地址495转换成物理地址的逻辑(图上未显示)。指令高速缓存432包括一转换参照缓冲器(translation lookaside buffer,简称TLB)502,以快取先前转换逻辑从虚拟提取地址495转换的物理地址。在一具体实施例中,TLB 502接收虚拟提取地址495的位[31:12],当虚拟提取地址495命中TLB 502时,则输出一对应的20位的物理分页号码(physical page number)512。
73指令高速缓存432包括一快取指令字节的数据数组506。数据数组506配置成数条快取线,以虚拟提取地址495的一部份来作索引。在一具体实施例中,数据数组506储存了64KB的指令字节,其以32个字节的快取线来配置。在一具体实施例中,指令高速缓存432是一四路集合关联高速缓存(4-way set associative cache)。因此,数据数组506包括512条指令字节线(line of instruction bytes),以提取地址495的位[13:5]来作索引。
74虚拟提取地址495所选取的指令字节线494,由指令高速缓存432输出至指令缓冲器342,如图4所示。在一具体实施例中,一次将选定的指令字节线的一半送至指令缓冲器342,即,分成两周期,每周期送16个字节。在本说明书中,快取线或指令位线可用以指称由提取地址495于指令高速缓存432内所选定的一快取线的部分,像是半快取线(half-cache line)或其它再细分的部分。
75指令高速缓存432亦包括一快取标志的标志数组(tag array)504。标志数组504,如同数据数组506,皆由虚拟提取地址495的相同位来作索引。物理地址的位取于标志数组5504,作为物理标志。由提取地址495位选定的物理标志514则送至标志数组504的输出端。
76指令高速缓存432亦包括一比较器(comparator)508,将物理标志514与TLB 502所提供的物理分页号码512作比较,以产生一命中信号(hit signal)518,指明虚拟提取地址495是否命中指令高速缓存432。命中信号518真正指出了是否有快取现行的工作指令(taskinstruction),因为指令高速缓存432将虚拟提取地址495转换为一物理地址,并用此物理地址来测定是否有命中。
77前述指令高速缓存432的运作与BTAC 402的运作成对比,后者仅依虚拟地址,即提取地址495,来测定是否命中,而非依据物理地址。此种运作上不同所造成的结果是,虚拟别名化(virtual aliasing)可能会发生,以致于BTAC 402产生错误的目标地址352,如下所述。
78请再参阅图4,图3的指令缓冲器342从指令高速缓存432接收快取线的指令字节494并予以缓冲,直至其被格式化与转换为止。如前文关于图3的V-阶段308所述,指令缓冲器342也储存了其它分支预测的相关数据,像是x86前置与mod R/M数据,以及指令字节是否为分支运算码值。
79此外,指令缓冲器342为其内所存的每个指令字节储存了一假想分支(speculatively branched,简称SB)位。如果处理器300假想地分支至BTAC 402所提供的假想目标地址352或假想返回地址353,其由假想调用/返回堆栈406依据快取于BTAC 402中的SBI 454所提供,则设定SBI 454所指出的指令字节的SB位438。也就是,如果处理器300进行假想分支是基于如下假设:在指令高速缓存432提供的指令字节线494中有一分支指令存在,而其SBI 454快取于BTAC 402中,则设定存于指令缓冲器342的指令字节494其中之一的SB位438。在一具体实施例中,则是针对SBI 454所指出假定的分支指令的运算码字节,设定其SB位438。
80指令译码逻辑436从指令缓冲器342接收指令字节493(包括分支指令字节)以将其译码,产生指令译码数据492。指令译码数据492用来进行分支指令预测,以及侦测与更正错误的假想分支。指令译码逻辑436提供指令译码数据492至流水线300之后段。此外,指令译码逻辑436在译码现行指令时,会产生下个循序指令指针(NSIP)466以及现行指令指针(current instruction pointer,CIP)468。此外,指令译码逻辑436提供指令译码数据492至非假想目标地址计算器(non-speculativetarget address calculator)416、非假想调用/返回堆栈(non-speculative call/return stack)414以及非假想分支方向预测装置(non-speculative branch direction predictor)412。最好(preferably)非假想调用/返回堆栈414、非假想分支方向预测装置412以及非假想目标地址计算器416属于流水线300的F-阶段312。
81 非假想分支方向预测装置412产生一分支指令方向的非假想预测444,即是否要进行分支,以响应从指令译码逻辑436接收的指令译码数据492。最好(preferably)非假想分支方向预测装置412包括一个或更多分支历史表,以储存已执行的分支指令的解析方向的历程。最好(preferably)分支历史表连同由指令译码逻辑436提供的分支指令本身的译码数据,用于预测条件分支指令的方向。非假想分支方向预测装置412的一个示范实施例详述于美国专利申请序号09/434,984  HYBRID BRANCH PREDICTOR WITH IMPROVED SELECTOR TABLE UPDATE MECHANISM,具有一共同申请人,通过参考此案可并入本发明。最好(preferably)最后解析出分支指令方向的逻辑属于流水线300的E-阶段326。
82非假想调用/返回堆栈414产生图3的非假想返回地址355,以响应从指令译码逻辑436接收的指令译码数据492。除了别的以外,指令译码数据492还指明现行译码的指令是否为调用指令、返回指令或两者皆否。
83此外,如果正由指令译码逻辑436译码的指令为一调用指令,指令译码数据492还会包括一返回地址488。最好(preferably)返回地址488包括现行译码的调用指令的指令指针加上调用指令的长度所得的值。当指令译码数据492显示现行译码的指令为一调用指令时,返回地址488会被推入非假想调用/返回堆栈414,如此在指令译码逻辑436进行后续返回指令的译码时,返回地址488就能做为非假想返回地址355。
84非假想调用/返回堆栈414的一个示范实施例详述于美国专利申请序号09/271,591  METHOD AND APPARATUS FOR CORRECTING AN INTERNAL CALL/RETURN STACK IN A MICROPROCESSOR THAT SPECULATIVELY EXECUTES CALL AND RETURN INSTRUCTIONS,具有一共同申请人,通过参考此案可并入本发明。
85非假想目标地址计算器416产生图3的非假想目标地址354,以响应从指令译码逻辑436接收的指令译码数据492。最好(preferably)非假想目标地址计算器416包括一算数逻辑单元,以计算程序计数器相关(PC-relative,下文称PC相关)类型或直接类型(direct type)分支指令的分支目标地址。最好(preferably)算数逻辑单元将分支指令的长度与一指令指针加到内含于分支指令的一带正负号的位移量(signedoffset),来计算PC相关类型分支指令的目标地址。最好(preferably)非假想目标地址计算器416包括一相当小的分支目标缓冲器(BTB),以快取间接类型(indirect type)分支指令的分支目标地址。非假想目标地址计算器416的一个示范实施例详述于美国专利申请序号09/438,907APPARATUS FOR PERFORMING BRANCH TARGET ADDRESS CALCULATION BASED ON BRANCH TYPE,具有一共同申请人,通过参考此案可并入本发明。
86 分支预测装置400包括假想分支目标地址高速缓存(BTAC)402。BTAC 402通过提取地址总线上的提取地址495进行寻址,检索BTAC 402内一快取线。BTAC 402并未整合在指令高速缓存432,而是分离且不同于指令高速缓存432,如图所示。也就是,BTAC 402与指令高速缓存432在物理上与概念上皆有所区别。BTAC 402与指令高速缓存432物理上的区别,在于两者在处理器300内处于不同的空间位置。BTAC 402与指令高速缓存432概念上的区别,在于两者具有不同的大小,即在一具体实施例中,它们包括不同数量的快取线。BTAC 402与指令高速缓存432概念上的区别,也在于指令高速缓存432将提取地址495转换成物理地址,以决定指令字节线的命中与否;BTAC 402却以虚拟提取地址495作为一虚拟地址来作索引,而没有将其转换为物理地址。
87最好(preferably)BTAC 402属于流水线300的I-阶段302。BTAC402快取了先前执行分支指令的目标地址。当处理器300执行一分支指令时,该分支指令的解析目标地址通过更新信号442快取于BTAC 402。该分支指令的指令指针1512(见图15)用来更新BTAC 402,如下文关于图15部分所描述的。
88为了产生图3的快取分支目标地址352,BTAC 402连同指令高速缓存432皆由指令高速缓存432的提取地址495并行检索。BTAC 402响应提取地址495而提供假想分支目标地址352。最好(preferably)提取地址495的32个位全都用来从BTAC 402选取假想目标地址352,如下文将更详细叙述的,主要是关于图6到图9的部分。假想分支目标地址352被送至包括一多工器422的地址选择逻辑422。
89多工器422从数个地址(包括BTAC 402目标地址352)中选取提取地址495,下文将会予以讨论。多工器422输出提取地址495至指令高速缓存432与BTAC 402。若多工器422选取了BTAC 402目标地址352,接着处理器300便会分支到BTAC 402目标地址352。也就是,处理器300将开始从指令高速缓存432提取位于BTAC 402目标地址352的指令。
90在一具体实施例中,BTAC 402比指令高速缓存432还小。特别是,BTAC 402快取目标地址所用的快取线数量比指令高速缓存432所含的还少。BTAC 402未整合在指令高速缓存432的结果是(虽然使用指令高速缓存432的提取地址495作为索引),若处理器300分支至BTAC 402所产生的目标地址352,它是以假想方式进行的。此分支是假想的,乃因根本无法确定在所选定的指令高速缓存432快取线中,是否有一分支指令存在,更别说是目标地址352因的而被快取的分支指令了。命中BTAC 402仅表示一分支指令先前存在于提取地址495所选取的指令高速缓存432快取线中。之所以无法确定一分支指令是否存在于所选取的快取线中,至少有两个理由。
91 无法确定一分支指令是否在提取地址495所检索的指令高速缓存432快取线中,其第一个理由是提取地址495是一虚拟地址;因此,虚拟别名化可能会发生。也就是,两个不同的物理地址可能对应到相同的虚拟提取地址495。一给定的提取地址495,其为虚拟的,可能转换成两个不同的物理地址,这两个地址关联于一多工(multitasking)处理器(像是处理器300)的两个不同行程或工作。指令高速缓存432利用图5的转换参照缓冲器502执行虚拟到物理的转换工作,以提供准确的指令数据。然而,BTAC 402依据虚拟提取地址495执行其查询工作,而没有执行虚拟到物理地址的转换工作。通过BTAC 402避免虚拟到物理地址的转换工作是有利的,因为比起有执行虚拟到物理地址转换工作的情形,它使假想分支能更快速地执行。
92 执行工作转换的操作系统,提供了虚拟别名化情形可能会发生的一个例子。在工作转换之后,处理器300会从指令高速缓存432提取位于关联新行程的虚拟提取地址495的指令,该关联新行程的虚拟提取地址495等同于关联旧行程的虚拟提取地址495,而旧行程则包括一分支指令,其目标地址快取于BTAC 402。指令高速缓存432会依据从虚拟提取地址495转换的物理地址来产生新行程的指令,如上文关于图5部分所描述的;然而,BTAC 402会只用虚拟提取地址495以产生旧行程的目标地址352,因而造成一错误的分支。有利的是,错误的假想分支只会在新行程的指令第一次执行时发生,此因在发现错误后,BTAC 402目标地址352将变为无效,如下文关于图10部分说明的。
93因此,分支到BTAC 402目标地址352是假想的,乃因在有些情况下,由于分支指令并不存在于指令高速缓存432的提取地址495(例如,因为虚拟别名化的关系),处理器300将分支至BTAC 402所产生的不正确的目标地址352。相反地,从这方面来看前述图2的Athlon整合式BTAC/指令高速缓存202以及图1的Pentium II/III分支目标缓冲器134,就是非假想性的。尤其,Athlon的方法因为在分支指令字节108旁并列储存了图2的目标地址206而假设虚拟别名化并未发生,所以是非假想性的。也就是,Athlon BTAC 202的查询工作是基于物理地址来执行的。PentiumII/III的方法,则因分支目标缓冲器134只在从指令高速缓存102提取分支指令以及指令译码逻辑132确定有一分支指令存在后,才产生一分支目标地址136。
94 此外,非假想目标地址计算器416、非假想调用/返回堆栈414以及非假想分支方向预测装置412也是非假想性的,此因它们只在从指令高速缓存432提取分支指令以及由指令译码逻辑436译码后,才产生分支预测,如下文将要说明的。
95 应该了解到,虽然非假想分支方向预测装置412所产生的方向预测444是“非假想性的”,即是在一分支指令已由指令译码逻辑436译码并确定该分支指令存在于现行指令流的情况下产生,非假想方向预测444仍是一“预测”。也就是,如果分支指令是条件分支指令,像是x86 JCC指令,则在分支指令的任何既定的执行中,分支可能会进行,也可能不会。
96 相类似地,非假想目标地址计算器416所产生的目标地址354以及非假想调用/返回堆栈414所产生的返回地址355也是非假想性的,因为这些地址是在确定有一分支指令存在于现行指令流的情况下而产生;尽管如此,它们仍然是预测。例如,以通过内存进行的x86间接跳转而言,自前次执行间接跳转以来,内存内容可能已有改变。如此,目标地址可能随的改变。因此,在本说明书中,就分支方向而言,“非假想的”不能与“无条件的”相混淆;就目标地址而言,“非假想的”则不能与“确定的”(certain)相混淆。
97 无法确定一分支指令是否在提取地址495所检索的指令高速缓存432快取线中,其第二个理由是自我修改码(self-modifying code)的存在。自我修改码可能会改变指令高速缓存432的内容,但这改变并不会反映在BTAC 402中。因此,一先前包括分支指令的指令高速缓存432快取线可能命中了BTAC 402,但此分支指令已被修改或置换为不同的指令。
98 分支预测装置400亦包括假想调用/返回堆栈406。假想调用/返回堆栈406储存返回指令的假想目标地址。假想调用/返回堆栈406因应控制逻辑404产生的控制信号483,产生图3的假想返回地址353。假想返回地址353被送至多工器422的一输入。当多工器422选取了假想调用/返回堆栈406所产生的假想返回地址353,处理器300便分支至假想返回地址353。
99 当BTAC 402指出一返回指令可能存在于由提取地址495指定的指令高速缓存432快取线中时,控制逻辑404会产生控制信号483,以控制假想调用/返回堆栈406来提供假想返回地址353。最好(preferably)当所选取的BTAC 402项目602的VALID 702与RET 706位(见图7)被设定,且BTAC 402命中信号452显示已命中BTAC 402标志数组614时,则BTAC 402指出一返回指令可能存在于由提取地址495指定的指令高速缓存432快取线中。
100BTAC 402响应提取地址495而产生命中信号452以及假想分支数据(SBI)454。命中信号452显示提取地址495命中了BTAC 402的一快取标志,此于下文关于图6的部分说明。SBI 454也会在下文关于图6部分作更详尽的说明。
101SBI 454包括一BEG 446信号(指令高速缓存432一快取线内的分支指令起始字节位移量(beginning byte offset))与一LEN 448信号(分支指令长度)。BEG 446的值、LEN 448的值与提取地址495由加法器434予以加总,而产生返回地址491。返回地址491由加法器434输出至假想调用/返回堆栈406,如此返回地址491就能被推入假想调用/返回堆栈406。控制逻辑404通过信号483与BTAC 402协同运作,将返回地址491推入假想调用/返回堆栈406。只有在所选定的BTAC 402项目602的VALID 702与CALL 704位(见图7)被设定且命中信号452显示已命中BTAC 402的标志数组614(见图6)时,返回地址491才会被推入堆栈。假想调用/返回堆栈406的运作方式在后文关于图8与图13部分会更详细地说明。
102 分支预测装置400也包括控制逻辑404。控制逻辑404通过控制信号478控制多工器422,以选取数个地址输入之一,作为提取地址495。控制逻辑404也通过信号482设定指令缓冲器342中的SB位438。
103 控制逻辑404接收命中信号452、SBI 454、来自非假想分支方向预测装置412的非假想分支方向预测444以及来自指令缓冲器342的FULL信号486。
104 分支预测装置400亦包括预测检查逻辑(prediction checklogic)408。预测检查逻辑408产生一ERR信号456,其被送至控制逻辑404,以指出已依据—BTAC 402的命中而执行一错误的假想分支,如后文关于图10部分所描述的。预测检查逻辑408通过信号484从指令缓冲器342接收SB位438,信号484亦被送至控制逻辑404。预测检查逻辑408也从BTAC 402接收SBI 454。预测检查逻辑408也从指令译码逻辑436接收指令译码数据492。预测检查逻辑408也接收图3E-阶段326所产生的解析分支方向DIR 481。
105 预测检查逻辑408也接收比较器489的输出185。比较器489将BTAC 402产生的假想目标地址352与图3E-阶段产生的解析目标地址356作比较。BTAC 402产生的假想目标地址352被存于缓存器,并顺着指令流水线300而下至比较器489。
106 预测检查逻辑408也接收比较器497的输出487。比较器497将假想调用/返回堆栈406产生的假想返回地址353与解析目标地址356作比较。假想返回地址353被存于缓存器,并顺着指令流水线300而下至比较器497。
107 BTAC 402的假想目标地址352被存于缓存器,并顺着指令流水线300而下,由比较器428将其与非假想目标地址计算器416的目标地址354作比较。比较器428的输出476被送至控制逻辑404。相类似地,假想调用/返回堆栈406产生的假想返回地址353也被存于缓存器,并顺着指令流水线300而下,由比较器418将其与非假想返回地址355作比较。比较器418的输出474亦被送至控制逻辑404。
108 分支预测装置400亦包括一储存多工化/缓存器(savemultiplexed/register,以下简称save mux/reg)424。save mux/reg 424由控制逻辑404所产生的控制信号472来控制。save mux/reg 424的输出498作为多工器422的一个输入。save mux/reg 424接收自己的输出498以及BTAC 402的假想目标地址352作为输入。
109 多工器422亦接收S-阶段328的分支地址356作为其输入。多工器422也接收提取地址495本身作为输入。多工器422亦接收由递增装置426产生的下个循序提取地址499,递增装置426接收提取地址495,并递增其值至指令高速缓存432的下条循序快取线。
110 现请参照图6,其为依本发明绘示的图4BTAC 402的方块图。在图6所示的具体实施例中,BTAC 402包括一四路集合关联高速缓存。BTAC402包括一数据数组612与一标志数组614。数据数组612包括一储存组件的数组,以储存快取分支目标地址与假想分支数据的项目。标志数组614包括一储存组件的数组,以储存地址标志。
111 数据数组612与标志数组614各自皆配置成四路,图标为路0、路1、路2以及路3。最好(preferably)数据数组612的每一路储存两个快取分支目标地址与假想分支数据的项目,称为A与B。由此,每次读取数据数组612时,就会产生八个项目602。此八个项目602被送至一八对二路选择多工器(way select mux)606。
112 数据数组612与标志数组614皆由图4指令高速缓存432的提取地址495来作索引。提取地址495的较低有效位(significant bit)选定了数组612与614内各一条快取线。在一具体实施例中,每个数组包括了128条快取线。因此,BTAC 402能够快取多达1024个目标地址(128条快取线的每条具四个路,每路可储存两个目标地址)。最好(preferably)数组612与614是通过提取地址495的位[11:5]来作索引。
113 标志数组614为每路产生一标志616。最好(preferably)每个标志616包括虚拟地址的20个位,且四个标志616的每一个皆由比较器604将其与提取地址495的位[31:12]作比较。比较器604产生图4的命中信号452,其依据是否有一标志616与提取地址495的最高有效位相匹配,以指出是否有命中BTAC。命中信号452被送至图4的控制逻辑404。
114 此外,比较器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。
115BTAC 402最好(preferably)是一单端口(single-ported)高速缓存。单端口高速缓存的优点是尺寸上比较小,因而比起双端口(dual-ported)高速缓存,在同样大小的空间中能够快取更多的目标地址。然而,双端口高速缓存的考虑是使同时地读写BTAC 402变得容易。双端口BTAC 402所具备的可同时读写的特征,由于更新写入的动作不需等待读取动作,使得BTAC 402的更新能更快速地进行。一般而言更快速的更新可得到更正确的预测,此因BTAC 402内的数据是更为现时的(current)。
116在一具体实施例中,指令高速缓存432内每条快取线包括32个字节。然而,指令高速缓存432有时会提供指令字节的半快取线494。在一具体实施例中,BTAC 402的每条快取线储存了两个项目602,因而包括了两个目标地址714,用于指令高速缓存432的每条半快取线。
117现请参阅图7,其为依本发明绘示图4BTAC 402的图6项目602的格式方块图。项目602包括了图4的SBI(假想分支数据)454与一分支目标地址(TA)714。SBI 454包括一VALID位702、图4的BEG 446与LEN 448、一CALL位704、一RET位706、一WPAP位708以及分支方向预测数据(BDPI)712。在图3的流水线300执行一分支后,该分支的解析目标地址即被快取于TA字段(field)714,而译码与执行分支指令所得的SBI 454则被快取于BTAC 402的项目602的SBI 454字段中。
118VALID位702指出了项目602是否可用于将处理器300假想分支至关联的目标地址714。特别是,VALID位702最初是处于清除状态,此因BTAC 402由于未快取任何有效的目标地址而是空的。当处理器300执行一分支指令,且与该分支指令关联的解析目标地址与假想分支数据被快取于项目602时,VALID位702就被设定。之后,如果BTAC 402依据项目602作了错误的预测,VALID位702就被清除,如下文关于图10部分所述。
119BEG字段446指定了指令高速缓存432的一快取线内分支指令的起始字节位移量。在侦测到有一调用指令命中BTAC 402时,BEG字段446被用来计算一返回地址,以储存于图4的假想调用/返回堆栈406。此外,BEG字段446被用来确定所选取BTAC 402路的图6项目A 624或项目B 626两者中哪一个导致了BTAC 402的命中,如下文关于图8部分所述。最好(preferably)由项目A 624与项目B 626所指定的分支指令位置,在指令高速缓存432的快取线内不需有任何特定的顺序。也就是,在指令高速缓存432的快取线中,项目B 626的分支指令可能还早于项目A 624的分支指令。
120LEN 448字段指出分支指令字节的长度。在侦测到一调用指令命中BTAC 402时,LEN 448字段被用来计算一返回地址,以储存于图4的假想调用/返回堆栈406。
121CALL位704指出所快取的目标地址714是否关联到一调用指令。也就是,如果一调用指令由处理器300执行,且该调用指令的目标地址快取于项目602,则CALL位704将被设定。
122 RET位706指出所快取的目标地址714是否关联到一返回指令。也就是,如果一返回指令由处理器300执行,且该返回指令的目标地址快取于项目602,则RET位706将被设定。
123WRAP位708在分支指令字节横跨两条指令高速缓存432的快取线时,会被设定。在一具体实施例中,WRAP位708在分支指令字节横跨两条指令高速缓存432的半快取线时,会被设定。
124BDPI(分支方向预测数据)字段712包括一T/NT(taken/nottaken,即采用/不采用)字段722与一SELECT位724。T/NT字段722包括分支的方向预测,即,它指明了分支是预测会采用或不会采用。最好(preferably)T/NT字段722包括一两位的上/下数饱和计数器(up/downsaturating counter),用以指定四种状态:极可能采用(stronglytaken)、有可能采用(weakly taken)、有可能不采用(weakly not taken)与极可能不采用(strong not taken)。在另一实施例中,T/NT字段722包括单一T/NT位。
125 SELECT位724用来在下列两者中作一选择:BTAC 402 T/NT方向预测722与由BTAC 402之外的分支历史表(BHT)(见图12)所做的方向预测,如关于图12部分所述。在一具体实施例中,如果在分支执行后,所选定的预测装置(即,BTAC 402或BHT 1202)准确地预测了方向,SELECT位724就不会更新。然而,如果所选定的预测装置没有准确地预测方向而另一个预测装置正确地预测方向,SELECT位724就会更新,以指明是非选定的预测装置,而不是所选定的预测装置。
126在一具体实施例中,SELECT位724包括一两位的上/下数饱和计数器,用以指定四种状态:极可能是BTAC(strongly BTAC)、有可能是BTAC(weakly BTAC)、有可能是BHT(weakly BHT)与极可能是BHT(strongBHT)。在此实施例中,如果在分支执行后,所选定的预测装置(即,BTAC402或BHT 1202)准确地预测了方向,饱和计数器即朝所选定的预测装置来计数。如果所选定的预测装置没有准确地预测方向而另一个预测装置正确地预测方向,饱和计数器即朝非选定的预测装置来计数。
127现请参照图8,其为依本发明绘示的图4假想分支预测装置400的运作流程图。图4的BTAC 402由图4的提取地址495作索引。因此,图6的BTAC 402比较器604响应图6的BTAC 402标志数组614的虚拟标志616,以产生图4的命中信号452。在步骤802中,图4的控制逻辑404检查命中信号452,以确定提取地址495是否命中BTAC 402。
128如果BTAC 402的命中并未发生,则在步骤822中控制逻辑404便不进行假想分支。也就是,控制逻辑404通过图4的控制信号478控制多工器422,以选取除了BTAC 402的目标地址352与假想调用/返回堆栈406的返回地址353外的一个输入。
129然而,如果BTAC 402的命中确实发生,在步骤804中,控制逻辑404便会确定图6的A项目624是否有效,被看见(seen)与被采用(taken)。
130若图7VALID位702被设定,控制逻辑404便确定项目624为“有效的”。如果VALID位702被设定,由提取地址495所选取的指令高速缓存432快取线就被假定为包括一分支指令,而该分支指令的分支预测数据则已先快取于A项目624;然而,如上文所讨论的,并不确定所选取的指令高速缓存432快取线包括有分支指令。
131若项目A 624的T/NT字段722指出,所假定的分支指令方向预期会被采用,则控制逻辑404便确定项目624“被采用”(taken)。在下述图12的具体实施例中,若所选取的方向指示装置(directionindicator)指出,所假定的分支指令方向预期会被采用,则控制逻辑404便确定项目624“被采用”。
132若图7的BEG字段446大于或等于提取地址495相对应的最低有效位(least significant bits),则控制逻辑404便确定项目624“被看见”(seen)。也就是,BEG字段446与提取地址495相对应的最低有效位作比较,以决定下个指令提取的位置是否位在指令高速缓存432中对应于A项目624的分支指令位置之前。例如,假设A项目624的BEG字段446包括一数值3,而提取地址495的较低位值为8。在这种情况下,可能就不会因此提取地址495分支至A项目624的分支指令。因此,控制逻辑404将不会假想分支至A项目624的目标地址714。这在提取地址495是分支指令的目标地址时特别有关系。
133若A项目624是有效的、预期会被采用且被看见,在步骤806中,控制逻辑404会检查图6的B项目626是否为有效、被看见与采用。控制逻辑404是以类似于步骤804对A项目624所用的方式,来决定B项目626是否为有效、被看见与采用。
134若A项目624是有效的、预期会被采用且被看见,但B项目626不是有效的、预期不被采用或者不被看见,则在步骤812中,控制逻辑404检查图7的RET字段706,以决定A项目624是否已快取返回指令的数据。若RET位706未被设定,则在步骤814中,控制逻辑404控制图6的A/B多工器608以选取项目A 624,并通过控制信号478控制多工器422,以假想分支至目标地址信号352所提供的BTAC 402项目A 624的目标地址714。相反地,若RET位706指出,在提取地址495所选取的指令高速缓存432快取线中,可能存在一返回指令,则在步骤818中,控制逻辑404通过控制信号478控制多工器422,以假想分支至图4假想调用/返回堆栈406的返回地址353。
135在步骤814或步骤818进行假想分支后,于步骤816中,控制逻辑404产生一指示于控制信号482中,表示已响应BTAC 402而执行一假想分支。也就是,不论处理器300假想分支至假想调用/返回堆栈406的返回地址353,或是BTAC 402项目A 624的目标地址352,控制逻辑404皆会于控制信号482中,显示已执行一假想分支。当一指令字节从指令高速缓存432进行至图3的指令缓冲器342时,控制信号482会用来设定SB位438。在一具体实施例中,控制逻辑404利用项目602的BEG 446字段,来设定指令缓冲器342内关联于分支指令的运算码字节的SB位438。此分支指令的SBI 454在提取地址495命中BTAC 402时,是假定已快取于BTAC 402中。
136若A项目624是无效的,或预期不被采用,或不被看见,如步骤804中所确定的,则控制逻辑404在步骤824中便会确定B项目626是否为有效、被看见与被采用。控制逻辑404是以类似于步骤804对A项目624所用的方式,来决定B项目626是否为有效、被看见与采用。
137若B项目626是有效的、预期会被采用且被看见,则在步骤832中,控制逻辑404检查RET字段706,以决定B项目626是否已快取返回指令的数据。若RET位706未被设定,则在步骤834中,控制逻辑404控制图6的A/B多工器608以选取项目B 626,并通过控制信号478控制多工器422,以假想分支至目标地址信号352所提供的BTAC 402项目B 626的目标地址714。相反地,若RET位706指出,在提取地址495所选取的指令高速缓存432快取线中,可能存在一返回指令,则在步骤818中,控制逻辑404通过控制信号478控制多工器422,以假想分支至假想调用/返回堆栈406的返回地址353。
138在步骤834或步骤818进行假想分支后,于步骤816中,控制逻辑404产生一指示于控制信号482中,表示已响应BTAC 402而执行一假想分支。
139若A项目624与B项目626皆是无效的,预期不被采用,或不被看见,则在步骤822中,控制逻辑404便不会进行假想分支。
140若A项目624与B项目626两者皆为有效的,预期被采用,且被看见,则在步骤808中,控制逻辑404便会去确定,在假定的分支指令(其数据快取于A项目624与B项目626)中,哪一个是指令高速缓存432的快取线指令字节494内,最先被看见的有效且被采用的分支指令。也就是,如果两个假定的分支指令都被看见、有效且被采用,控制逻辑404便通过比较A项目624与B项目626的BEG 446字段,来决定哪一个假定的分支指令具有较小的内存地址。若B项目626的BEG 446的值比A项目624的BEG 446的值还小,则控制逻辑404便进行至步骤832,依据B项目626进行假想分支。否则,控制逻辑404便进行至步骤812,依据A项目624进行假想分支。
141在一具体实施例中,假想调用/返回堆栈406并不存在。所以,步骤812、818与832皆未执行。
142从图8可以看出,本发明有利地提供一装置,用以将多个分支指令的目标地址与假想分支数据快取于一分支目标地址高速缓存中一特定的指令快取线,而该分支目标地址高速缓存并未整合在指令高速缓存内。特别是,分支指令的位置数据快取于快取线内的BEG字段446,有利地使控制逻辑404无需前译码快取线,就能够从快取线内可能的多个分支指令中,决定要假想分支至哪一个。也就是,BTAC 402在虑及可能有两个或更多分支指令存在于所选取快取线的情况下,决定目标地址,而不用知道有多少分支指令(假若有的话)存在于快取线中。
143现请参阅图9,其为依本发明绘示的图4假想分支预测装置400使用图8步骤选取图4目标地址352的一运作范例的方块图。此范例显示一值为0x10000009的提取地址495进行指令高速缓存432与BTAC 402的检索,且该提取地址495也被送至图4的控制逻辑404。为了简明起见,关于指令高速缓存432与BTAC 402的多路关联性(multi-wayassociativity)的数据,像是图6的多个路与路多工器606,并未显示出来。指令高速缓存432的一快取线494由提取地址495选取。快取线494包括快取于地址0x10000002的一x86条件跳转指令(JCC)与快取于地址0x1000000C的一x86 CALL指令。
144此范例也显示了提取地址495所选取的BTAC 102快取线内A项目602A与B项目602B的一些组成部份。项目A 602A包括CALL指令的快取数据,而项目B 602B包括JCC指令的快取数据。项目A 602A显示其VALID位702A被设为1,表示其为一有效的项目A 602A,即,图7相关联的目标地址714与SBI 454是有效的。项目A 602A也显示出一值为0x0C的BEG字段446A,对应于该CALL指令的指令指针地址的最低有效位。项目A 602A也显示了一值为“被采用”的T/NT字段722A,表示该CALL指令预期会被采用。响应提取地址495,A项目602A通过图6的信号624送至控制逻辑404。
145项目B 602B显示其VALID位702B被设为1,表示其为一有效的项目B 602B。项目B 602B也显示出一值为0x02的BEG字段446B,对应于该JCC指令的指令指针地址的最低有效位。项目B 602B也显示了一值为“被采用”的T/NT字段722B,表示该JCC指令预期会被采用。响应提取地址495,B项目602B通过图6的信号626送至控制逻辑404。
146此外,BTAC 402将命中信号452设定为真,以显示提取地址495命中了BTAC 402。控制逻辑404接收项目A 602A与项目B 602B,并依照图8所述的方法,根据命中信号452、提取地址495的值以及602A与602B两个项目,产生图6的A/B选择信号622。
147在步骤802中,控制逻辑404依据命中信号452被设定为真,而确定BTAC 402有一命中发生。接着于步骤804中,控制逻辑404依据VALID位702A被设定,而确定项目A 602A是有效的。而因T/NT字段722A显示为被采用,控制逻辑404也于步骤804确定项目A 602A是被采用的。由于BEG字段446A的值0x0C大于或等于提取地址495的值0x09对应的较低位,控制逻辑404亦于步骤804确定项目A 602A被看见。既然项目A 602A是有效的、被采用与被看见,控制逻辑404便进行至步骤806。
148于步骤806中,控制逻辑404依据VALID位702B被设定,而确定项目B 602B是有效的。而因T/NT字段722B显示为被采用,控制逻辑404也于步骤806确定项目B 602B是被采用的。由于BEG字段446B的值0x02小于提取地址495的值0x09对应的较低位,控制逻辑404亦于步骤806确定项目B 602B未被看见。既然项目B 602B未被看见,控制逻辑404便进行至步骤812。
149在步骤812中,控制逻辑404通过图7被清除的RET位706而确定关联于项目A 602A所快取的指令不是返回指令,并进行至步骤814。在步骤814中,控制逻辑404产生一A/B选择信号622的值,以驱使图6的A/B多工器608选取信号624上的项目A 602A。这个选择的动作导致项目A 602A的图7目标地址714被选为图3的目标地址352,送至图4的提取地址495选择多工器422。
150因此,从图9的范例可以看出,图4的分支预测装置400有利地运作,以选取最先、有效、被看见、被采用的所选定BTAC 402快取线的项目602,将处理器300假想分支至其中关联的目标地址714。有利的是,即使有多个分支指令存在于对应的选定的指令高速缓存432快取线494,装置400仍能在不知快取线494内容的情况下,完成假想分支的动作。
151现请参阅图10,其为依本发明绘示的图4假想分支预测装置400侦测与更正错误的假想分支预测的运作流程图。从指令缓冲器342接收一指令后,在步骤1002中,图4的指令译码逻辑436便译码该指令。尤其,指令译码逻辑436将指令字节流(stream of instruction bytes)格式化成一不同的x86巨指令,并确定该指令的长度以及是否为分支指令。
152接着,在步骤1004中,图4的预测检查逻辑408测定所译码指令中,是否有任何指令字节的SB位438被设定。也就是,预测检查逻辑408测定是否先前已基于现行译码的指令命中BTAC 402,而执行一假想分支。若没有执行任何假想分支,则不会采取行动去更正。
153若有执行一假想分支,则在步骤1012中,预测检查逻辑408会检查现行译码的指令,以确定该指令是否为非分支指令。最好(preferably)预测检查逻辑408会测定该指令是否为x86指令集的非分支指令。
154如果该指令不是分支指令,则在步骤1022中,预测检查逻辑408将图4的ERR信号456设定为真,以表示侦测到一错误的假想分支。此外,通过图4的更新信号442,BTAC 402得以更新,而清除图6对应的BTAC 402项目602的图7VALID位702。再者,图3的指令缓冲器342会清除掉因此一错误的假想分支而从指令高速缓存432误取的指令。
155如果该指令不是分支指令,则在步骤1024中,控制逻辑404接着控制图4的多工器422,以分支至指令译码逻辑436所产生的CIP 468,更正该错误的假想分支。步骤1024中所进行的分支,将使得包括该指令的指令高速缓存432快取线重新被提取与作假想预测。然而,这次该指令的VALID位702将被清除;因此,该指令将不执行任何假想分支,用来更正先前错误的假想分支。
156若在步骤1012中已确定该指令为一有效的分支指令,则在步骤1014中,预测检查逻辑408会确定在所译码指令的指令字节内,位于非运算码(non-opcode)字节位置的指令,有否任何字节的SB位438被设定。也就是,虽然一字节可能包括一处理器300指令集的有效运算码值,该有效运算码值却可能位于一个就指令格式而言是无效的字节位置。对一x86指令而言,除了前置字节外,运算码字节应该是指令的第一个字节。例如,对于在指令的立即数据(immediate data)或位移字段(displacement field)中,或者因虚拟别名化而在一x86指令mod R/M或SIB(Scale Index Base,比例-索引-基底)字节中所含的分支运算码值,SB位438可能因之而错误地被设定。若分支运算码字节位于非运算码字节位置,则执行步骤1022与1024以更正错误的假想预测。
157若在步骤1012中,预测检查逻辑408确定该指令为一有效的分支指令,且在步骤1014中,确定没有非运算码字节的SB位438被设定,则在步骤1016中,预测检查逻辑408会确定是否有假想与非假想指令长度上的不匹配。也就是,预测检查逻辑408将步骤1002中指令译码逻辑436产生的非假想指令的长度与BTAC 402产生的图7假想LEN 448字段作一比较。若指令长度不匹配,则执行步骤1022与1024以更正错误的假想预测。
158若在步骤1012中,预测检查逻辑408确定该指令为一有效的分支指令,且在步骤1014中,确定只有运算码字节的SB位438被设定,以及在步骤1016确定指令长度匹配,则该指令便顺着流水线300而下,直至抵达图3的E-阶段326。在步骤1032中,E-阶段326解析出图3的正确的分支指令目标地址356,并确定图4的正确的分支方向DIR 481。
159接着,在步骤1034中,预测检查逻辑408确定BTAC 402是否错误预测了分支指令的方向。也就是,预测检查逻辑408将E-阶段326所解析的正确方向DIR 481与BTAC 402产生的图7预测722作比较,以确定是否已执行一错误的假想分支。
160若BTAC 402预测了一错误的方向,则在步骤1042中,预测检查逻辑408将ERR信号456设定为真,以告知控制逻辑404此错误。因此,控制逻辑404便通过图4的更新信号442,来更新图6对应的BTAC 402项目602的BTAC 402方向预测722。最后,在步骤1042中,控制逻辑404会清除掉流水线300中因该错误的假想分支而从指令高速缓存432误取的指令。接着,在步骤1044中,控制逻辑404驱使多工器422选取图4的NSIP 466,使处理器300分支至分支指令的下个指令,以更正该错误的假想分支。
161若在步骤1034中无方向的错误,则在步骤1036中,预测检查逻辑408会确定是否BTAC 402或假想调用/返回堆栈406错误地预测了分支指令的目标地址。也就是,若处理器300假想分支至BTAC 402目标地址352,则预测检查逻辑408会检查图4比较器489的结果485,以确定是否假想目标地址352不匹配所解析的正确目标地址356。另一种情况是,若处理器300假想分支至假想调用/返回堆栈406返回地址353,则预测检查逻辑408会检查图4比较器497的结果487,以确定是否假想返回地址353不匹配所解析的正确目标地址356。
162若在步骤1036侦测到一目标地址的错误,则在步骤1052中,预测检查逻辑408将ERR信号456设定为真,以显示侦测到一错误的假想分支。此外,控制逻辑404通过更新信号442,以步骤1032产生的解析目标地址356来更新图6对应的BTAC 402项目602。再者,会清除掉流水线300中因该错误的假想分支而从指令高速缓存432误取的指令。接着,在步骤1054中,控制逻辑404控制图4的多工器422,以分支至解析目标地址356,用来更正先前错误的假想分支。
163现请参照图11,为依本发明列举的程序代码实例片段及一表格1100,为说明图10假想分支预测错误的侦测与更正的一范例。程序代码片段包括一先前程序代码片段与一现行程序代码片段。例如,该先前程序代码片段图标了在图3处理器300进行工作交换(task switch)前,图4指令高速缓存432中位于虚拟地址0x00000010的程序代码。该现行程序代码片段则图标了在工作交换后,指令高速缓存432中位于虚拟地址0x00000010的程序代码,就像在虚拟别名化情形所可能发生的。
164该先前程序代码序列(code sequence)包括一在0x00000010地址位置的x86 JMP(无条件跳转)指令。该JMP指令的目标地址为0x00001234。该JMP指令已执行;所以,在现行程序代码序列执行时,目标地址0x00001234已因应地址0x00000010而快取于图4的BTAC 402。也就是,目标地址714已被快取,VALID位702被设定,BEG 446、LEN 448与WRAP 708字段写入适当的值,图7的CALL 704与RET 706位则被清除。在此范例中,假定T/NT字段722显示出所快取的分支将被采用,且JMP快取于BTAC 402快取线的A项目624中。
165现行程序代码序列包括一位于0x00000010的ADD(算术加)指令,与先前程序代码序列中的JMP指令的虚拟地址相同。现行程序代码序列中位置0x00001234是SUB(算术减)指令,位置0x00001236则是INC(算术递增)指令。
166表格1100包括八行(column)与六列(row)。第一列之后七行代表七个脉冲周期(clock cycle),从1至7。第一行之后五列代表流水线300最先的五个阶段,即I-阶段302、B-阶段304、U-阶段306、V-阶段308与F-阶段312。表格1100的其它方格则显示当执行现行程序代码序列时,在不同脉冲周期中每个阶段的内容。
167在脉冲周期1期间,BTAC 402与指令高速缓存432被存取。ADD指令显示于I-阶段302。图4值为0x00000010的提取地址495检索BTAC402与指令高速缓存432,依据图8的流程决定是否需要进行一假想分支。在图11的范例中,一值为0x00000010的提取地址495会命中BTAC 402,如下所述。
168在脉冲周期2期间,ADD指令显示于B-阶段304。这是指令高速缓存432提取周期(fetch cycle)的第二个脉冲。标志数组614提供标志616,而数据数组612提供图6的项目602,每个项目602包括图7的目标地址714与SBI 454。因为先前程序代码序列的JMP指令在执行后已被快取,图6的比较器604便根据图8的步骤802产生一标志命中(taghit)于信号452上。比较器604也通过信号618控制路多工器606去选取适当的路。控制逻辑404检查A项目624与B项目626的SBI 454,在此例中并选择A项目624以提供目标地址352与SBI 454。在此例中,控制逻辑404也依据步骤804与812来决定项目是有效、被采用、被看见且不是返回指令。
169在脉冲周期3期间,ADD指令显示于U-阶段306。ADD指令由指令高速缓存432提供,并闩锁于U-阶段306。因为图8的步骤802至814是在脉冲周期2中执行,控制逻辑404便通过控制信号478控制图4的多工器422,以选取BTAC 402所提供的目标地址352。
170在脉冲周期4期间,ADD指令进行至V-阶段308,在此阶段被写入指令缓冲器342。脉冲周期4是假想分支周期。也就是,处理器300依据图8的步骤814,开始提取位于值为0x00001234的快取目标地址352的指令。即,根据图8,提取地址495被改为地址0x00001234,以完成假想分支至该地址的动作。因此,位于地址0x00001234的SUB指令,在脉冲周期4是显示于I-阶段302。此外,控制逻辑404通过图4的信号482指出,已执行一假想分支。所以,根据图8的步骤816,指令缓冲器342中一SB位438对应于ADD指令被设定。
171在脉冲周期5期间,侦测到假想分支中的错误。ADD指令进行到F-阶段312。SUB指令进行至B-阶段304。位于下个循序指令指针的INC指令,则显示于I-阶段302。图4的F-阶段312指令译码逻辑436译码ADD指令,并产生图4的CIP 468。预测检查逻辑408依据步骤1004,通过信号484侦测到关联于ADD指令的SB位438被设定。预测检查逻辑408依据步骤1012,也侦测到ADD指令是一非分支指令,并接着依据步骤1022将图4的ERR信号456设为真,以表示在周期4中已执行错误的假想分支。
172在脉冲周期6期间,使错误的假想分支无效。依据步骤1022,指令缓冲器342被清空。尤其,ADD指令从指令缓冲器342中清除。此外,依据步骤1022,导致错误假想分支的项目602所关联的VALID位702则被清除,以更新BTAC 402。再者,控制逻辑404控制多工器422,以选取CIP 468作为下个周期的提取地址495。
173在脉冲周期7期间,更正错误的假想分支。处理器300开始从指令高速缓存432提取位于ADD指令的指令指针的指令,该ADD指令是在脉冲周期5侦测到错误时,由指令译码逻辑436所译码的。也就是,处理器300依据步骤1024分支至对应于ADD指令的CIP 468,用来更正在脉冲周期5所执行的错误的假想分支。因此,ADD指令在脉冲周期7是显示于I-阶段302。这次,ADD指令将顺着流水线300而下并执行。
174现请参阅图12,其为依本发明绘示的图4分支预测装置400包括一混合假想分支方向预测装置1200的另一具体实施例的方块图。简单就可以看出,BTAC 402的分支方向预测愈准确,假想分支至BTAC 402产生的假想目标地址352就愈能有效地减少分支延迟惩罚。反过来说,错误的假想分支愈不常被更正,如关于图10部分所述,假想分支至BTAC 402产生的假想目标地址352就愈能有效地减少处理器300的平均分支延迟惩罚。方向预测装置1200包括图4的BTAC 402、一分支历史表(BHT)1202、异或逻辑(exclusive OR logic)1204、全域分支历史缓存器(globalbranch history registers)1206与一多工器1208。
175全域分支历史缓存器1206包括一移位缓存器(shift register),对于处理器300所执行的所有分支指令,全域分支历史缓存器1206接收其分支方向结果1212,而该移位缓存器则储存分支方向结果1212的全域历史。每次处理器300执行一分支指令,图4的DIR位481就被写入移位缓存器1206,若分支方向被采用,该位值为“设定”;若分支方向不被采用,该位值为“清除”。由此,最早的(oldest)位就被移出移位缓存器1206。在一具体实施例中,移位缓存器1206储存了全域历史的13个位。全域分支历史的储存,在分支预测的技术领域中是为人熟知的,对于程序中高度依存于其它分支指令的分支指令,可改良其结果的预测。
176全域分支历史1206通过信号1214送至异或逻辑1204,以与图4的提取地址495进行一逻辑的异或运算。异或逻辑1204的输出1216作为分支历史表1202的索引。在分支预测的技术领域中,异或逻辑1204所执行的功能一般都称为gshare运算。
177分支历史表1202包括一储存组件的数组,以储存数个分支指令的分支方向结果的历史。该数组由异或逻辑1204的输出1216作为索引。当处理器300执行一分支指令,由异或逻辑1204的输出1216所检索的分支历史表1202的数组组件便通过信号1218选择性地加以更新,而信号1218的内容则视解析分支方向DIR 481而定。
178在一具体实施例中,分支历史表1202数组中的每个储存组件包括两个方向预测:A与B方向预测。最好(preferably)如图所示,分支历史表1202产生A与B方向预测于T/NT_A/B 1222信号上,针对BTAC 402产生的图6A项目624与B项目626各指定一方向预测以供选取。在一具体实施例中,分支历史表1202的储存组件数组包括4096个项目,每个可储存两个方向预测。
179在一具体实施例中,A与B预测各包括单一T/NT(taken/nottaken,即采用/不采用)位。在此实施例中,该T/NT位更新为DIR位481的值。在另一具体实施例中,A与B预测各包括一两位的上/下数饱和计数器,指定了四种状态:极可能采用(strongly taken)、有可能采用(weakly taken)、有可能不采用(weakly not taken)与极可能不采用(strong not taken)。在此实施例中,饱和计数器朝DIR位481指出的方向来计数。
180多工器1208从分支历史表1202接收两个方向预测位T/NT A/B1222,并从BTAC 402接收A项目624与B项目626各自的图7T/NT方向预测722。多工器1208亦从BTAC 402接收A项目624与B项目626各自的SELECT位724,作为选择控制信号。A项目624的SELECT位724从两个A输入中选取一T/NT给A项目624。B项目626的SELECT位724从两个B输入中选取一T/NT给B项目626。所选取的两个T/NT位1224被送至控制逻辑404,通过图4的信号478,用于控制多工器422。在图12的实施例中,所选取的两个T/NT位1224分别包括于项目A 624与项目B 626,被送至控制逻辑404,如图6所示。
181可以看出,若处理器300分支至目标地址352,且该地址352是BTAC 402依据(至少部分是)分支历史表1202所提供的方向预测1222而产生,则该分支是以假想的方式进行。该分支是假想的,此因虽然命中BTAC 402已指出一分支指令先前存在于提取地址495所选取的指令高速缓存432快取线中,但仍无法确定一分支指令位于所选取的指令高速缓存432快取线中,如上所讨论的。
182也可以看出,比起单单只有BTAC 402方向预测722,图12的混合分支方向预测装置1200可能有利地提供一更准确的分支方向预测。尤其,一般而言,对于高度依存于其它分支历史的分支而言,分支历史表1202提供了较准确的预测;反的,对于并非高度依存于其它分支历史的分支而言,则是BTAC 402提供了较准确的预测。就一既定的分支而言,通过SELECT位724能选择较准确的预测装置。因此,可以看出,图12的方向预测装置1200能有利地与BTAC 402协同运作,以使用BTAC 402所提供的目标地址352进行更准确的假想分支。
183现请参阅图13,其为图4的双调用/返回堆栈406与414的运作流程图。计算机程序的一项特性是,可能从程序内多个位置来调用子程序(subroutine)。所以,子程序内一返回指令的返回地址可能变来变去。因此,可以看出,利用分支目标地址高速缓存去预测返回地址通常很不容易,从而调用/返回堆栈的出现,实有其必要。本发明的双调用/返回地址堆栈的架构提供了本发明的假想BTAC的好处,像是在流水线300早期即预测分支目标地址,以减少分支惩罚。除此之外,还广泛提供了调用/返回堆栈的优点,即,比一简单的BTAC 402更准确地预测返回地址。
184在步骤1302中,图4的BTAC 402由图4的提取地址495作索引,而图4的控制逻辑404检查命中信号452,以确定提取地址495是否命中BTAC 402,还检查SBI 454的VALID位702,以确定所选取的BTAC 402项目602是否有效。若BTAC 402的命中未发生或VALID位702未被设定,则控制逻辑404并不会使处理器300进行假想分支。
185若在步骤1302期间一有效的BTAC 402命中发生,则在步骤1304中,控制逻辑404会检查图4SBI 454的图7CALL位704,以确定所快取的分支指令假想地或大概地是否为一调用指令。若CALL位704被设定,则在步骤1306中,控制逻辑404控制假想调用/返回堆栈406,以将假想返回地址491推入其中。也就是,该假定的调用指令的假想返回地址491,其为图4的提取地址495、BEG 446与LEN 448的总和,储存于假想调用/返回堆栈406。假想返回地址491之所以为假想的,乃因在命中BTAC 402的提取地址495所关联的指令高速缓存432快取线中,并不确定真有包括一调用指令,更别说是BEG 446与LEN 448因的而被快取于BTAC 402的调用指令了。假想返回地址491,或目标地址,在下一次执行返回指令时,可由返回地址信号353提供,以便假想分支至此返回地址491,就如下文关于步骤1312至1318所述。
186若Call位704被设定,则在步骤1308中,控制逻辑404接着控制多工器422去选取图3的BTAC 402目标地址352,以假想分支至目标地址352。
187若控制逻辑404在步骤1304确定CALL位704未被设定,则在步骤1312中,控制逻辑404会检查SBI 454的图7RET位706,以确定所快取的分支指令假想地或大概地是否为一返回指令。若RET位706被设定,则在步骤1314中,控制逻辑404控制假想调用/返回堆栈406,以将图3的假想返回地址353从堆栈顶端取出。
188在取出假想返回地址353后,则在步骤1316中,控制逻辑接着控制多工器422去选取从假想调用/返回堆栈406取出的假想返回地址353,以假想分支至返回地址353。
189返回指令顺着流水线300而下,直至抵达图3的F-阶段312,图4的指令译码逻辑436则译码此假定的返回指令。若此假定的返回指令的确是一返回指令,则图4的非假想调用/返回堆栈414产生此返回指令的图3非假想返回地址355。在步骤1318中,图4的比较器418将假想返回地址353与非假想返回地址355作比较,并将结果714送至控制逻辑404。
190在步骤1318中,控制逻辑404检查比较器418的结果474,以确定是否有不匹配发生。若假想返回地址353与非假想返回地址355不相匹配,则在步骤1326中,控制逻辑404会控制多工器422选取非假想返回地址355,以使处理器300分支至非假想返回地址355。
191若控制逻辑404于步骤1304中确定CALL位704并未设定,且于步骤1312中确定RET位706也未设定,则在步骤1322中,控制逻辑404会控制多工器422假想分支至图3的BTAC 402目标地址352,如图8步骤814或834所描述的。
192因此,从图13可看出,图4的双重调用/返回堆栈的运作可减少调用与返回指令的分支惩罚。这种分支惩罚的减少,是通过将处理器300结合BTAC 402,使调用与返回指令在流水线更早期就进行分支,同时也克服以下现象:由于子程序一般都从一些不同的程序位置来调用,返回指令因而会返回至多个不同的返回地址。
193现请参照图14,为说明图4的分支预测装置400以非假想分支预测来选择性地覆盖(override)假想分支预测,用来改进本发明的分支预测准确度的运作流程图。在从指令缓冲器342接收一指令后,在步骤1402中,图4的指令译码逻辑436便译码该指令,图4的非假想目标地址计算器416、非假想调用/返回堆栈414以及非假想分支方向预测装置412则依图4的指令译码数据492产生非假想分支预测。指令译码逻辑436在步骤1402中,产生该指令的类型数据于指令译码数据492中。
194尤其是,指令译码逻辑436会确定该指令是否为分支指令、指令的长度以及分支指令的类型。最好(preferably)指令译码逻辑436会确定分支指令是否为条件或无条件类型分支指令、PC相关类型分支指令、返回指令、直接类型分支指令或间接类型分支指令。
195若该指令为一分支指令,非假想分支方向预测装置412会产生图4的非假想方向预测444。此外,非假想目标地址计算器416则计算图3的非假想目标地址354。最后,若该指令为一返回指令,则非假想调用/返回堆栈414产生图3的非假想返回地址355。
196在步骤1404中,控制逻辑404会确定分支指令是否为条件分支指令。也就是,控制逻辑404会确定该指令是否依靠一条件而被采用或不被采用,该条件像是旗标(flag)位是否设定,如零旗标(zeroflag)、进位旗标(carryflag)等等。在x86指令集中,JCC指令是条件类型的分支指令。相对地,RET、CALL与JUMP指令,则是无条件分支指令,因为这些指令总会有一被采用的方向。
197若该指令为条件类型的分支指令,则在步骤1412中,控制逻辑404会确定非假想分支方向预测装置412所预测的非假想方向预测444以及BTAC 402所预测SBI 454中图7的假想方向722两者间,是否不相匹配。
198若有方向预测上的不匹配,则在步骤1414中,控制逻辑404会确定非假想方向预测444是否要被采用。若非假想方向预测444不被采用,则在步骤1414中,控制逻辑404会控制多工器422选取图4的NSIP 466,以分支至现行分支指令后的指令。也就是,控制逻辑404选择性地覆盖假想的BTAC 402方向预测。假想方向预测722之所以被覆盖,是因非假想方向预测444一般比较准确。
199若非假想方向预测444被采用,则在步骤1432中,控制逻辑404会控制多工器422分支至非假想目标地址354。同样地,假想方向预测722之所以被覆盖,是因非假想方向预测444一般比较准确。
200若控制逻辑404于步骤1412确定并无方向预测上的不匹配,且已执行分支指令的假想分支(即,若SB位438被设定),则在步骤1428中,控制逻辑404会确定假想目标地址352与非假想目标地址354间是否不相匹配。若有一条件类型分支的目标地址的不匹配,则在步骤1432中,控制逻辑404会控制多工器422分支至非假想目标地址354。假想目标地址预测352会被覆盖,此因非假想目标地址预测354一般更为准确。若没有一条件类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。
201若在步骤1404中,控制逻辑404确定该分支指令不是条件类型的分支,则于步骤1406控制逻辑404会确定该分支指令是否为返回指令。若该分支指令是返回指令,则在步骤1418中,控制逻辑404会确定假想调用/返回堆栈406产生的假想返回地址353与非假想调用/返回堆栈414产生的非假想返回地址355两者间,是否不相匹配。
202若假想返回地址353与非假想返回地址355两者不相匹配,则在步骤1422中,控制逻辑404会控制多工器422分支至非假想返回地址355。也就是,控制逻辑404选择性地覆盖假想返回地址353。假想返回地址353之所以被覆盖,是因非假想返回地址355一般比较准确。若没有一直接类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。请注意步骤1418与1422分别对应到图13的步骤1324与1326。
203若在步骤1406中,控制逻辑404确定该分支指令不是返回指令,则于步骤1408控制逻辑404会确定该分支指令是否为PC相关类型的分支指令。在x86指令集中,PC相关类型的分支指令所指定的带正负号的位移量会加上现行程序计数器的值,以计算目标地址。
204在另一具体实施例中,控制逻辑404于步骤1408也会确定该分支指令是否为直接类型的分支指令。在x86指令集中,直接类型的分支指令于自身内即指定目标地址。直接类型的分支指令也被称为立即类型(immediate type)的分支指令,因为目标地址被指定于指令的立即字段(immediate field)。
205若该分支指令为PC相关类型的分支指令,则在步骤1424中,控制逻辑404会确定假想目标地址352与非假想目标地址354间是否不相匹配。若有一PC相关类型分支的目标地址的不匹配,则在步骤1426中,控制逻辑404会控制多工器422分支至非假想目标地址354。假想目标地址预测352会被覆盖,此因非假想目标地址预测354对PC相关类型的分支而言一般更为准确。若没有一PC相关类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。
206若在步骤1408中,控制逻辑404确定该分支指令不是PC相关类型的分支指令,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。在一具体实施例中,非假想目标地址计算器416在F-阶段312包括一相当小的分支目标缓冲器(branch target buffer,BTB),仅用来快取间接类型分支指令的分支目标地址,如前面关于图4部分所述。
207可以看出,对间接类型的分支指令而言,BTAC 402的预测一般是比相当小的F-阶段312 BTB更为准确。所以,若确定该分支为一间接类型的分支指令,控制逻辑404不会覆盖BTAC 402的假想预测。也就是,若一间接类型分支指令的假想分支因图8所述的BTAC 402命中而执行,则控制逻辑404会通过分支至间接类型的BTB目标地址,而不覆盖该假想分支。然而,即使在此间接类型的分支中,BTAC 402所产生的假想目标地址352未被非假想目标地址354给覆盖,在流水线300稍后仍会于假想目标地址352与图3从S-阶段328接收的非假想目标地址356两者间,做一目标地址的比较,以执行图10的步骤1036,侦测错误的假想分支。
208现请参照图15,其为依本发明绘示的用来置换图4BTAC 402中目标地址的装置的方块图。为了简明起见,关于BTAC 402的多路关联性的数据,像是图6的多路与路多工器606,并未显示。图6BTAC 402的数据数组612显示其包括了一选定的BTAC 402快取线,其中具有项目A 602A与项目B 602B,分别通过图6的信号624与626送至控制逻辑404。项目A 602A与项目B 602B各包括其相关的图7VALID位702。
209该选定的BTAC 402快取线亦包括一A/B LRU(least recentlyused)位1504,以指出项目A 602A与项目B 602B两者中,哪一个最近最不被使用到。在一具体实施例中,每次一发生命中BTAC 402的一既定目标地址714,A/B LRU位1504就被更新,以指定发生命中项目的相对项目。也就是,若控制逻辑404因项目A 602A发生命中而进行至图8的步骤812,则A/B LRU位1504就被更新成显示项目B 602B。相反地,若控制逻辑404因项目B 602B发生命中而进行至图8的步骤832,则A/B LRU位1504就被更新成显示项目A 602A。A/B LRU位1504也被送至控制逻辑404。
210此置换装置也包括一多工器1506。多工器1506接收图4提取地址495与一更新指令指针(IP)作为输入。多工器1506依据控制逻辑404提供的读/写控制信号1516来选取其中一输入。读/写控制信号1516亦被送至BTAC 402。当读/写控制信号1516显示为“读”,则多工器1506选取提取地址495,经由信号1514送至BTAC 402,以读取BTAC 402。当读/写控制信号1516显示为“写”,则多工器1506选取更新IP 1512,经由信号1514送至BTAC 402,以通过图4信号442将一更新目标地址714与/或SBI 454与/或A/B LRU位1504写入BTAC 402。
211当一分支指令执行且被采用,该分支指令的目标地址714以及相关联的SBI 454会被写入,或快取于,一BTAC 402项目602。也就是,用已执行的分支指令的新目标地址714及相关联的SBI 454来更新BTAC402。控制逻辑404必须决定在BTAC 402的哪一边,A或B,来更新由更新IP 1512选取的BTAC 402快取线与路。也就是,控制逻辑404必须决定是否要置换所选取的快取线与路的项目A 602A或项目B 602B。控制逻辑404如下表一所示来决定置换哪一边。
Valid A          Valid B              Replace
0                0                    --LastWritten
0                1                    A
1                0                    B
1                1                    LRU
                   表一
212表一为具有两个输入的真值表(truth table),两个输入为项目A 602A的VALID位702与项目B 602B的VALID位702。该真值表的输出用以决定要置换BTAC 402的哪一边。如表一所示,若A项目602A无效且B项目602B有效,则控制逻辑404将A项目602A置换掉。若A项目602A有效且B项目602B无效,则控制逻辑404将B项目602B置换掉。若A项目602A与B项目602B皆有效,则控制逻辑404将最近较少被使用的项目置换掉,而此项目是由更新IP 1512所选取BTAC 402快取线与路中的A/B LRU位1504来指定。
213若A项目602A与B项目602B皆无效,则控制逻辑404必须决定要置换哪一边。一种解决方式是总是写到某一边,如A。然而,这种解决方式会造成如下程序代码序列1所示的问题。
        0x00000010 JMP  0X00000014
        0x00000014 ADD  BX,1
        0x00000016 CALL 0x12345678
               程序代码序列1
214在程序代码序列1中,此三个指令都位在相同的指令高速缓存432的快取线内,因为其指令指针地址除了较低的四个地址位外余皆相同;因此,JMP与CALL指令选取相同的BTAC 402快取线与路。假设此范例中,当指令执行时,由JMP与CALL指令所选取BTAC 402快取线与路内的A项目602A与B项目602B皆无效。使用“当两个项目皆无效时,总是更新A这一边”的解决方式,JMP指令将见到两边皆为无效,且将更新A项目602A。
215然而,由于在程序序列中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而不必要地被取代。
216为解决如表一所示的问题,若A项目602A与B项目602B皆无效,则控制逻辑404会有利地选取存于一全域置换状态旗标缓存器即LastWritten缓存器1502的一边或其相反边。LastWritten缓存器1502包括于置换装置,并由其来更新。LastWritten缓存器1502储存一指示,其显示BTAC 402的A边或B边是否为最后被写到一无效的BTAC 402项目602。有利地,此方法使用LastWritten缓存器1502以避免前面程序代码序列1所示的问题,如现在关于图16与17部分所要叙述的。
217现请参照图16,其为依本发明图15装置的一运作方法的流程图。图16阐明了上述表一的一具体实施例。
218当控制逻辑404需要去更新BTAC 402的项目602时,控制逻辑404会分别检查所选取的A项目602A与B项目602B的VALID位702。在步骤1602中,控制逻辑404会确定是否A项目602A与B项目602B两者皆为有效。若两个项目皆有效,则在步骤1604中,控制逻辑404会检查A/B LRU位1504以确定A项目602A或B项目602B为最近最少被使用者。若A项目602A为最近最少被使用者,则控制逻辑404于步骤1606将A项目602A置换掉。若B项目602B为最近最少被使用者,则控制逻辑404于步骤1608将B项目602B置换掉。
219若控制逻辑404于步骤1602中确定并非两个项目都无效,则在步骤1612中,控制逻辑404会确定是否为A项目602A有效而B项目602B无效。若是,则控制逻辑404于步骤1614将B项目602B置换掉。不然,在步骤1622中,控制逻辑404会确定是否为A项目602A无效而B项目602B有效。若是,则控制逻辑404于步骤1624将A项目602A置换掉。否则,在步骤1632中,控制逻辑404会检查LastWritten缓存器1502。
220若LastWritten缓存器1502显示BTAC 402的A边并非最后被写到一选定的快取线与路中,而在此选定的快取线与路中A项目602A与B项目602B皆为无效,则控制逻辑404于步骤1634将A项目602A置换掉。控制逻辑404接着于步骤1636更新LastWritten缓存器1502,以指定BTAC 402的A边为最后被写到一选定快取线与路的边,而在此选定的快取线与路中A项目602A与B项目602B皆为无效。
221若LastWritten缓存器1502显示BTAC 402的B边并非最后被写到一选定的快取线与路中,而在此选定的快取线与路中A项目602A与B项目602B皆为无效,则控制逻辑404于步骤1644将B项目602B置换掉。控制逻辑404接着于步骤1646更新LastWritten缓存器1502,以指定BTAC 402的B边为最后被写到一选定快取线与路的边,而在此选定的快取线与路中A项目602A与B项目602B皆为无效。
222可以看出,图16的方法可避免在上述程序代码序列1中,以CALL指令的目标地址覆写掉JMP指令的目标地址。假设当JMP指令执行时,LastWritten缓存器1502指定了A边。既然B边并不是最后被写的,控制逻辑404将依据图16与表一来更新B项目602B。此外,控制逻辑404将更新LastWritten缓存器1502以指定B边。因此,当CALL指令执行时,控制逻辑404将依据图16更新A项目602A,此因当BTAC 402被选取时,两个项目皆无效,且LastWritten缓存器1502指明了A边并不是最后被写到。因此,有利地,JMP与CALL指令两者的目标地址将快取于BTAC 402,供后续的假想分支使用。
223现请参照图17,其为依本发明的另一具体实施例绘示图15装置的一运作方法的流程图。图17的步骤除了两个额外步骤外,其余皆与图16的步骤相同。在此另一具体实施例中,控制逻辑404在置换一无效的项目后,会更新LastWritten缓存器1502,即使另一项目为有效的。
224因此,在图17,于步骤1614置换了B项目602B后,在步骤1716中,控制逻辑404将更新LastWritten缓存器1502以指定B边。此外,于步骤1624置换了A项目602A后,在步骤1726中,控制逻辑404将更新LastWritten缓存器1502以指定A边。
225虽然物理的仿真并未看到图16与17的实施例在效能上有显着差别,但可看出图16实施例解决了图17实施例所无法处理的一个问题。此问题以下述程序代码序列2来解说。
        0x00000010 JMP 0x12345678
        0x12345678 JMP 0x00000014
        0x00000014 JMP 0x20000000
             程序代码序列2
226位于指令指针0x00000010与0x00000014的两个JMP指令都在同一条指令高速缓存432快取线中,并选取BTAC 402内相同的快取线。位于指令指针0x12345678的JMP指令则在另一条指令高速缓存432快取线中,并选取BTAC 402内另一条不同的快取线。当JMP 0x12345678指令执行时,假设有下列情况存在。LastWritten缓存器1502指定了B边。由JMP 0x12345678指令与JMP 0x20000000指令的指令指针所选取BTAC402快取线与路中的A项目602A与B项目602B两者皆为无效。由JMP0x00000014指令的指令指针所选取的BTAC 402快取线与路则显示A项目602A有效而B项目602B无效。假设在JMP 0x12345678指令更新BTAC 402前,执行JMP 0x20000000指令。因此,JMP 0x12345678与JMP 0x20000000指令的指令指针在相同BTAC 402快取线中选取相同的路。
227依据图16与17,当JMP 0x12345678执行时,控制逻辑404将于步骤1634以JMP 0x12345678的目标地址来置换A项目602A,并在步骤1636更新LastWritten缓存器1502以指定A边。依据图16与17,当JMP 0x00000014执行时,控制逻辑404将于步骤1614以JMP 0x00000014的目标地址来置换B项目602B。依据图17,控制逻辑404将于步骤1716更新LastWritten缓存器1502以指定B边。然而,依据图16,控制逻辑404将不会更新LastWritten缓存器1502;而是,LastWritten缓存器1502将继续指定A边。因此,当JMP 0x00000020执行时,依据图17,控制逻辑404将于步骤1634以JMP 0x00000020的目标地址来置换A项目602A,用来needlessly clobbering JMP 0x12345678的目标地址。相反地,依据图16,当JMP 0x00000020执行时,控制逻辑404将于步骤1644置换B项目602B,用来有利地使A项目602A中JMP 0x12345678的目标地址保持不变。
228现请参照图18,其为依本发明的另一具体实施例绘示的用以进行图4BTAC 402中目标地址置换动作的装置方块图。图18的实施例类似于图15的实施例。然而,在图18的实施例中,A/B LRU位1504与两个项目的T/NT位722,显示为T/NT A 722A与T/NT B 722B,储存于一另外的数组1812,而非数据数组612。
229此额外的数组1812是双端口的;而数据数组612却是单端口。因为A/B LRU位1504与T/NT位722比起项目602的其它字段更常被更新,对较常被更新的字段提供双端口的存取,可减低在高存取量期间于BTAC 402形成瓶颈的可能性。然而,由于双端口的高速缓存数组比单端口的高速缓存数组来得大,且消耗更多功率,较少被存取的字段就储存在单端口的数据数组612。
230现请参照图19,其为依本发明的另一具体实施例绘示的用以进行图4BTAC 402中目标地址置换动作的装置方块图。图19的实施例类似于图15的实施例。然而,图19的实施例中,每一BTAC 402快取线与路皆包括一第三项目,项目C 602C。项目C 602C通过信号1928送至控制逻辑404。有利地,图19的实施例支持假想分支至三个分支指令中任一个的能力,而此三个分支指令快取由提取地址495所选取的一对应的指令高速缓存432快取线中;或者,在一实施例中,支持假想分支至快取于一对应的指令高速缓存432半快取线的三个分支指令中的任一个。
231除此之外,图19的实施例不使用LastWritten缓存器1502,取而代之的是一缓存器1902,其包括一LastWritten值与一LastWrittenPrev值。当LastWritten值要更新时,控制逻辑404在更新LastWritten值之前,便将LastWritten值的内容复制到LastWrittenPrev值。LastWritten值与LastWrittenPrev值这两个值一起使得控制逻辑404得以确定三个项目中哪一个是最近最少被写到的,如现在于表二及其后的等式所描述的。
232表二类似于表一,除了表二有三个输入,包括项目C 702C的附加的VALID位702。在等式中,“lw”对应至LastWritten值,“lwp”LastWrittenPrev值。在一具体实施例中,只有当所有三个项目皆为无效时,才更新LastWritten与LastWrittenPrev的值,类似于图16的方法。在另一具体实施例中,任何时候控制逻辑404更新了一无效的项目,LastWritten与LastWrittenPrev的值就会更新,类似于图17的方法。
    Valid A     Valid B     Valid C   Replace
    0     0     0   LRW
    0     0     1   LRWofAandB
    0     1     0   LRWofAandC
    0     1     1   A
    1     0     0   LRWofBandC
    1     0     1   B
    1     1     0   C
    1     1     1     LRU
                表二
LRW=AOlderThanB?LRWofAandC∶LRWofBandC
LRWofAandB=AOlderThanB?A∶B
LRWofAandC=AOlderThanC?A∶C
LRWofBandC=BOlderThanC?B∶C
AOlderThanB=(lw==B)|((lwp==B &(lw!=A))
BOlderThanC=(lw==C)|((lwp==C &(lw!=B))
AOlderThanC=(lw==C)|((lwp==C &(lw!=A))
233虽然本发明及其目的、特征与优点已详细叙述了,其它具体实施例仍涵盖在本发明的范围内。例如,BTAC可用任何数量的高速缓存来配置,包括直接映像(direct-mapped)、完全关联(fully associative)或不同数目的路高速缓存。再者,BTAC的大小可增或减。而且,一提取地址,而不是位于物理包括被预测分支指令的快取线的提取地址,可用来检索BTAC与分支历史表。例如,先前提取指令的提取地址可用来在分支前减低指令泡沫的大小。此外,储存于高速缓存的每一路的目标地址数量可能改变。另外,分支历史表的大小可能改变,且存于其中的位的数目与方向预测数据的形式,以及检索分支历史表的算法(algorithm)也可能改变。再者,指令高速缓存的大小可能改变,且用以检索指令高速缓存与BTAC的虚拟提取地址的类型也可能改变。
234总之,以上所述仅为本发明的较佳实施例而已,当不能限定本发明所实施的范围。凡依本发明权利要求所作的等效变化与修饰,皆应仍属于本发明专利涵盖的范围内。

Claims (50)

1.一种在一处理器中使用的分支预测装置,其特征在于,该处理器包括地址选择逻辑,以提供一提取地址至一指令高速缓存,该提取地址用来选取该指令高速缓存的数条快取线,该分支预测装置包括:
第一与第二分支预测装置,分别提供一分支指令的一第一与一第二目标地址预测至地址选择逻辑;
指令译码逻辑,组态为接收及译码该分支指令,并产生该分支指令的一类型;以及
分支控制逻辑,组态为控制该地址选择逻辑选取该第一目标地址预测作为该提取地址,该第一目标地址预测选取指令高速缓存的一第一快取线;
其中该分支控制逻辑更组态为接着依据该分支指令类型,选择性地控制地址选择逻辑选取该第二目标地址预测作为该提取地址,该第二目标地址预测选取指令高速缓存的一第二快取线。
2.如权利要求1所述的装置,其特征在于,还包括:
比较逻辑,对应于该第一与第二分支预测装置,将该第一与第二目标地址预测作比较。
3.如权利要求2所述的装置,其特征在于,该类型包括一该分支指令是否为返回类型分支指令的说明(specification)。
4.如权利要求3所述的装置,其特征在于,若该分支指令类型为一返回指令且该第一目标地址预测与第二目标地址预测不相匹配,则该分支控制逻辑控制地址选择逻辑选取该第二目标地址预测。
5.如权利要求4所述的装置,其特征在于,该第二分支预测装置包括一调用/返回堆栈,提供该返回指令的该第二目标地址预测。
6.如权利要求2所述的装置,其特征在于,该类型包括一该分支指令是否为程序计数器相关类型分支指令的说明。
7.如权利要求6所述的装置,其特征在于,若该分支指令类型为一程序计数器相关分支指令且该第一与第二预测不相匹配,则该分支控制逻辑控制地址选择逻辑选取该第二目标地址预测。
8.如权利要求7所述的装置,其特征在于,该第二分支预测装置包括一算术单元(arithmetic unit),以根据该分支指令的一指令指针计算该第二目标地址预测。
9.如权利要求8所述的装置,其特征在于,该算术单元使用该分支指令的该指令指针计算该第二目标地址预测。
10.如权利要求2所述的装置,其特征在于,该类型包括一该分支指令是否为直接类型分支指令的说明。
11.如权利要求10所述的装置,其特征在于,若该分支指令类型为一直接分支指令且该第一目标地址预测与第二目标地址预测不相匹配,则该分支控制逻辑控制地址选择逻辑选取该第二目标地址预测。
12.如权利要求2所述的装置,其特征在于,该类型包括一该分支指令是否为闲接类型分支指令的说明。
13.如权利要求12所述的装置,其特征在于,若该分支指令类型为一闲接分支指令,则该分支控制逻辑控制地址选择逻辑不去选取该第二目标地址预测。
14.如权利要求13所述的装置,其特征在于,该第二分支预测装置包括一分支目标缓冲器,以快取先前执行的数个间接分支指令的数个分支目标地址。
15.如权利要求2所述的装置,其特征在于,该类型包括一该分支指令是否为条件类型分支指令的说明。
16.如权利要求15所述的装置,其特征在于,若该分支指令类型为一条件分支指令且该第一目标地址预测与第二目标地址预测不相匹配,则该分支控制逻辑控制地址选择逻辑选取该第二目标地址预测。
17.如权利要求15所述的装置,其特征在于,该第一与第二分支预测装置提供该条件分支指令的一第一与一第二方向预测至该分支控制逻辑,以预测该条件分支指令是否将被采用。
18.如权利要求17所述的装置,其特征在于,还包括:
第二比较逻辑,对应于该第一与第二分支预测装置,用以将该条件分支指令的该第一与第二方向预测作比较。
19.如权利要求18所述的装置,其特征在于,若该第二方向预测预期该条件分支指令将不被采用,则该分支控制逻辑控制地址选择逻辑选取该条件分支指令的一下个循序指令的一指令指针,以作为该提取地址。
20.如权利要求19所述的装置,其特征在于,若该第二方向预测预期该条件分支指令将不被采用且该第一与第二方向预测不相匹配,则该分支控制逻辑控制地址选择逻辑选取该下个循序指令指针。
21.如权利要求2所述的装置,其特征在于,若该第一目标地址预测与第二目标地址预测不相匹配,则该分支控制逻辑接着根据该分支指令类型控制地址选择逻辑,以选取该第二目标地址预测作为提取地址。
22.如权利要求1所述的装置,其特征在于,该分支指令类型包括一x86分支指令类型。
23.如权利要求1所述的装置,其特征在于,该第一分支预测装置接收该指令高速缓存的提取地址,并响应该提取地址而提供该第一目标地址预测。
24.如权利要求23所述的装置,其特征在于,该第一分支预测装置响应该提取地址而提供该第一目标地址预测,不论是否有一分支指令存在于指令高速缓存的一第三快取线中,该第三指令快取线在选取该第一指令快取线后被选取。
25.如权利要求23所述的装置,其特征在于,该第一分支预测装置在该指令译码逻辑译码该分支指令前,便提供该第一目标地址预测。
26.如权利要求1所述的装置,其特征在于,该第一分支预测装置包括一分支目标地址高速缓存,由该指令高速缓存的提取地址作索引。
27.如权利要求1所述的装置,其特征在于,该第一分支预测装置包括一假想调用/返回堆栈。
28.一种在一处理器中使用的分支预测装置,其特征在于,包括:
第一与第二分支预测装置,对一分支指令作第一与第二预测;
比较逻辑,对应于该第一与第二分支预测装置,组态为提供一该第一与第二预测的比较;
指令译码逻辑,组态为译码该分支指令,并产生该分支指令的一类型;以及
控制逻辑,对应于该指令译码逻辑,使处理器依该第一预测进行分支;
其中该控制逻辑基于分支指令的该类型与该比较,以该第二预测选择性地覆盖该第一预测。
29.如权利要求28所述的装置,其特征在于,该指令译码逻辑在该第一分支预测装置作第一预测后,译码该分支指令并产生该分支指令类型。
30.如权利要求28所述的装置,其特征在于,该第二分支预测装置作第二预测,以响应该指令译码逻辑译码该分支指令。
31.如权利要求28所述的装置,其特征在于,该第二分支预测装置包括一分支历史表,用以在该第二预测中提供一方向预测,该方向预测用以预测该分支指令是否将被采用。
32.如权利要求28所述的装置,其特征在于,若该分支类型是一条件分支类型,则该比较逻辑将该第一与第二预测中的第一与第二方向预测做比较。
33.如权利要求32所述的装置,其特征在于,若该第一与第二方向预测不相匹配,则该控制逻辑以该第二预测覆盖该第一预测。
34.如权利要求28所述的装置,其特征在于,该比较逻辑将该第一与第二预测中的第一与第二目标地址做比较。
35.如权利要求34所述的装置,其特征在于,若该第一与第二目标地址不相匹配,则该控制逻辑基于分支指令的该类型,通过使处理器分支至该第二目标地址,而以该第二预测选择性地覆盖该第一预测。
36.一种流水线化处理器,其特征在于,包括:
一假想分支预测装置,用以对一分支指令作一假想预测;
控制逻辑,对应于该假想分支预测装置,依据该假想预测使该处理器进行分支;
指令译码逻辑,组态为译码该分支指令,并产生该分支指令的一类型;以及
一非假想分支预测装置,对应于该指令译码逻辑,用以对该分支指令作一非假想预测;
其中该控制逻辑接着依据该非假想预测与该分支指令类型,选择性地使处理器进行分支。
37.如权利要求36所述的处理器,其特征在于,还包括:
一指令高速缓存,对应于一用以接收一提取地址的地址总线(addressbus),该提取地址选取一指令快取线以送至该指令译码逻辑。
38.如权利要求37所述的处理器,其特征在于,该假想分支预测装置作该假想预测,即使有可能并无分支指令存在于该指令快取线中。
39.如权利要求36所述的处理器,其特征在于,该非假想分支预测装置作该非假想预测,以响应指令译码逻辑译码该分支指令。
40.一种流水线化处理器,其特征在于,包括:
一分支目标地址高速缓存,在译码一指令前提供该指令的一假想目标地址;
一目标地址计算器,在该指令的该译码后计算该指令的一非假想目标地址;
一比较器,对应于该分支目标地址高速缓存及该目标地址计算器,用于比较该假想与非假想目标地址;
其中该处理器分支至该假想目标地址,其中若该假想与非假想目标地址比较后不相匹配,且该指令的类型属于一第一指令类型集合,则该处理器接着分支至该非假想目标地址。
41.如权利要求40所述的处理器,其特征在于,该第一指令类型集合包括一返回指令类型。
42.如权利要求40所述的处理器,其特征在于,该第一指令类型集合包括一程序计数器相关分支指令类型。
43.如权利要求40所述的处理器,其特征在于,该第一指令类型集合包括一条件分支指令类型。
44.一种流水线化处理器,其特征在于,包括:
一分支目标地址高速缓存,提供一假想方向,以指出一假设的条件分支指令是否将被采用,该假想方向在译码该假设的条件分支指令前便已提供;
一分支历史表,提供该指令的一非假想方向,该非假想方向是在该假设的条件分支指令的该译码后才提供;
一比较器,对应于该分支目标地址高速缓存及该分支历史表,用以比较该假想与非假想方向;
其中若假想与非假想方向比较后不相匹配,则该处理器便分支至该指令后一下个循序指令指针,如果该非假想方向指出该指令将不被采用的话。
45.一种在一流水线化处理器中用以分支的方法,其特征在于,包括:
产生一分支指令的一假想目标地址;
将处理器分支至该假想目标地址;
在该分支后译码该分支指令;
在该译码后产生该分支指令的一非假想目标地址;
确定该分支指令的一分支类型;
确定该假想与非假想目标地址是否匹配;以及
若假想与非假想目标地址不相匹配,即依据该分支类型,选择性地分支至非假想目标地址。
46.如权利要求45所述的方法,其特征在于,还包括:
确定该分支类型是否为一程序计数器相关类型分支指令;
其中若假想与非假想目标地址不相匹配,且若该分支类型是一程序计数器相关类型分支指令,则该选择性地分支包括分支至非假想目标地址。
47.如权利要求45所述的方法,其特征在于,还包括:
确定该分支类型是否为一返回类型分支指令;
其中若假想与非假想目标地址不相匹配,且若该分支类型是一返回类型分支指令,则该选择性地分支包括分支至非假想目标地址。
48.如权利要求45所述的方法,其特征在于,还包括:
确定该分支类型是否为一条件类型分支指令;
其中若假想与非假想目标地址不相匹配,且若该分支类型是一条件类型分支指令,则该选择性地分支包括分支至非假想目标地址。
49.如权利要求45所述的方法,其特征在于,还包括:
确定该分支类型是否为一间接类型分支指令;
其中若该分支类型是一间接类型分支指令,则该选择性地分支包括不分支至非假想目标地址。
50.如权利要求45所述的方法,其特征在于,还包括:
在译码该分支指令后产生该分支指令的一非假想方向预测;
若该非假想方向预测指出该分支指令将不被采用,则分支至该分支指令后一下个循序指令指针。
CNB021185565A 2001-05-04 2002-04-27 附有第二预测装置的假想分支目标地址高速缓存 Expired - Lifetime CN1260646C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/849,799 US7165169B2 (en) 2001-05-04 2001-05-04 Speculative branch target address cache with selective override by secondary predictor based on branch instruction type
US09/849,799 2001-05-04

Publications (2)

Publication Number Publication Date
CN1397880A true CN1397880A (zh) 2003-02-19
CN1260646C CN1260646C (zh) 2006-06-21

Family

ID=25306551

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021185565A Expired - Lifetime CN1260646C (zh) 2001-05-04 2002-04-27 附有第二预测装置的假想分支目标地址高速缓存

Country Status (3)

Country Link
US (1) US7165169B2 (zh)
CN (1) CN1260646C (zh)
TW (1) TW523712B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置
CN101819522A (zh) * 2009-03-04 2010-09-01 威盛电子股份有限公司 微处理器以及相关指令解析的方法
CN101876891A (zh) * 2009-02-12 2010-11-03 威盛电子股份有限公司 微处理器以及快速执行条件分支指令的方法
CN104020982A (zh) * 2013-03-01 2014-09-03 Mips技术公司 具有高效返回预测能力的分支目标缓冲器
CN104049938A (zh) * 2013-03-13 2014-09-17 想象力科技有限公司 间接分支预测
CN104471529A (zh) * 2012-06-25 2015-03-25 高通股份有限公司 用以扩展软件分支目标提示的方法及设备
CN106030516A (zh) * 2013-10-25 2016-10-12 超威半导体公司 分支预测单元和1级指令高速缓存中的带宽增加
CN106843816A (zh) * 2017-01-23 2017-06-13 青岛朗思信息科技有限公司 一种分支预测控制方法及装置
CN114008581A (zh) * 2019-07-31 2022-02-01 美光科技公司 用以加速推测性执行的备用高速缓存集合

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6895498B2 (en) 2001-05-04 2005-05-17 Ip-First, Llc Apparatus and method for target address replacement in speculative branch target address cache
US7165168B2 (en) 2003-01-14 2007-01-16 Ip-First, Llc Microprocessor with branch target address cache update queue
US7707397B2 (en) 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
US7203824B2 (en) 2001-07-03 2007-04-10 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US6823444B1 (en) * 2001-07-03 2004-11-23 Ip-First, Llc Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap
US7162619B2 (en) 2001-07-03 2007-01-09 Ip-First, Llc Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer
US7234045B2 (en) * 2001-07-03 2007-06-19 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US6836828B2 (en) * 2002-04-03 2004-12-28 Faraday Technology Corp. Instruction cache apparatus and method capable of increasing a instruction hit rate and improving instruction access efficiency
US7159097B2 (en) * 2002-04-26 2007-01-02 Ip-First, Llc Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts
US7024663B2 (en) * 2002-07-10 2006-04-04 Micron Technology, Inc. Method and system for generating object code to facilitate predictive memory retrieval
US6954836B2 (en) * 2002-07-11 2005-10-11 Micron Technology, Inc. System and method for processor with predictive memory retrieval assist
US7185186B2 (en) 2003-01-14 2007-02-27 Ip-First, Llc Apparatus and method for resolving deadlock fetch conditions involving branch target address cache
US7143269B2 (en) * 2003-01-14 2006-11-28 Ip-First, Llc Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor
US7152154B2 (en) 2003-01-16 2006-12-19 Ip-First, Llc. Apparatus and method for invalidation of redundant branch target address cache entries
US7178010B2 (en) 2003-01-16 2007-02-13 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack
US7237098B2 (en) 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
CN101002169A (zh) 2004-05-19 2007-07-18 Arc国际(英国)公司 微处理器架构
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
US9176741B2 (en) 2005-08-29 2015-11-03 Invention Science Fund I, Llc Method and apparatus for segmented sequential storage
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7644258B2 (en) * 2005-08-29 2010-01-05 Searete, Llc Hybrid branch predictor using component predictors each having confidence and override signals
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US8275976B2 (en) * 2005-08-29 2012-09-25 The Invention Science Fund I, Llc Hierarchical instruction scheduler facilitating instruction replay
US7747088B2 (en) 2005-09-28 2010-06-29 Arc International (Uk) Limited System and methods for performing deblocking in microprocessor-based video codec applications
US20070088937A1 (en) * 2005-10-13 2007-04-19 International Business Machines Corporation Computer-implemented method and processing unit for predicting branch target addresses
US8677104B2 (en) * 2006-05-30 2014-03-18 Arm Limited System for efficiently tracing data in a data processing system
US7752425B2 (en) * 2006-05-30 2010-07-06 Arm Limited Data processing apparatus having trace and prediction logic
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7610449B2 (en) * 2006-10-04 2009-10-27 International Business Machines Corporation Apparatus and method for saving power in a trace cache
US8386712B2 (en) * 2006-10-04 2013-02-26 International Business Machines Corporation Structure for supporting simultaneous storage of trace and standard cache lines
US7707398B2 (en) * 2007-11-13 2010-04-27 Applied Micro Circuits Corporation System and method for speculative global history prediction updating
US8555040B2 (en) 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
US20120079255A1 (en) * 2010-09-25 2012-03-29 Combs Jonathan D Indirect branch prediction based on branch target buffer hysteresis
US8788797B2 (en) * 2010-12-22 2014-07-22 Advanced Micro Devices, Inc. Combined level 1 and level 2 branch predictor
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US8972706B2 (en) * 2011-05-26 2015-03-03 International Business Machines Corporation Performance in predicting branches
US9201654B2 (en) 2011-06-28 2015-12-01 International Business Machines Corporation Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions
US9268569B2 (en) * 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9235419B2 (en) * 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US8972665B2 (en) 2012-06-15 2015-03-03 International Business Machines Corporation Cache set selective power up
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
US10152327B2 (en) 2013-03-15 2018-12-11 Intel Corporation Apparatus for gating a load operation based on entries of a prediction table
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
WO2014151652A1 (en) * 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9442736B2 (en) 2013-08-08 2016-09-13 Globalfoundries Inc Techniques for selecting a predicted indirect branch address from global and local caches
US9940262B2 (en) 2014-09-19 2018-04-10 Apple Inc. Immediate branch recode that handles aliasing
US10175964B2 (en) * 2014-09-26 2019-01-08 Microsoft Technology Licensing, Llc Compiler caching for runtime routine redundancy tracking
GB2533650B (en) * 2014-12-23 2021-07-21 Advanced Risc Mach Ltd Debugging data processing transactions
US20170371669A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Branch target predictor
US10430198B2 (en) * 2018-01-12 2019-10-01 Intel Corporation Dynamic detection and prediction for store-dependent branches
US10489305B1 (en) 2018-08-14 2019-11-26 Texas Instruments Incorporated Prefetch kill and revival in an instruction cache
US10642742B2 (en) * 2018-08-14 2020-05-05 Texas Instruments Incorporated Prefetch management in a hierarchical cache system
US11016763B2 (en) * 2019-03-08 2021-05-25 Advanced Micro Devices, Inc. Implementing a micro-operation cache with compaction
US11579884B2 (en) * 2020-06-26 2023-02-14 Advanced Micro Devices, Inc. Instruction address translation and caching for primary and alternate branch prediction paths
US20220121446A1 (en) * 2020-10-15 2022-04-21 Centaur Technology, Inc. Quick predictor override

Family Cites Families (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US540467A (en) * 1895-06-04 George w
US604459A (en) * 1898-05-24 Electric meter
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4181942A (en) * 1978-03-31 1980-01-01 International Business Machines Corporation Program branching method and apparatus
US4860197A (en) 1987-07-31 1989-08-22 Prime Computer, Inc. Branch cache system with instruction boundary determination independent of parcel boundary
US5193205A (en) 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US5142634A (en) 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5226126A (en) 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5163140A (en) 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
WO1992006426A1 (en) 1990-10-09 1992-04-16 Nexgen Microsystems Method and apparatus for parallel decoding of instructions with branch prediction look-up
JPH0820950B2 (ja) * 1990-10-09 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチ予測型分岐予測機構
US5394530A (en) 1991-03-15 1995-02-28 Nec Corporation Arrangement for predicting a branch target address in the second iteration of a short loop
US5961629A (en) 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
US5832289A (en) 1991-09-20 1998-11-03 Shaw; Venson M. System for estimating worst time duration required to execute procedure calls and looking ahead/preparing for the next stack operation of the forthcoming procedure calls
US5434986A (en) * 1992-01-09 1995-07-18 Unisys Corporation Interdependency control of pipelined instruction processor using comparing result of two index registers of skip instruction and next sequential instruction
CA2124333A1 (en) 1992-02-27 1993-09-02 John A. Saba Cpu having pipelined instruction unit and effective address calculation unit with retained virtual address capability
US5313634A (en) 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US5434985A (en) 1992-08-11 1995-07-18 International Business Machines Corporation Simultaneous prediction of multiple branches for superscalar processing
JP3057934B2 (ja) 1992-10-30 2000-07-04 日本電気株式会社 共有バス調停機構
US5463748A (en) 1993-06-30 1995-10-31 Intel Corporation Instruction buffer for aligning instruction sets using boundary detection
US5623614A (en) 1993-09-17 1997-04-22 Advanced Micro Devices, Inc. Branch prediction cache with multiple entries for returns having multiple callers
DK0661625T3 (da) 1994-01-03 2000-04-03 Intel Corp Fremgangsmåde og apparatur til implementering af et firetrins system til bestemmelse af programforgreninger (Four Stage Bra
US5604877A (en) 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
TW253946B (en) 1994-02-04 1995-08-11 Ibm Data processor with branch prediction and method of operation
SG47981A1 (en) 1994-03-01 1998-04-17 Intel Corp Pipeline process of instructions in a computer system
US5530825A (en) 1994-04-15 1996-06-25 Motorola, Inc. Data processor with branch target address cache and method of operation
US5623615A (en) 1994-08-04 1997-04-22 International Business Machines Corporation Circuit and method for reducing prefetch cycles on microprocessors
US5706491A (en) 1994-10-18 1998-01-06 Cyrix Corporation Branch processing unit with a return stack including repair using pointers from different pipe stages
US5606682A (en) 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
US5687360A (en) 1995-04-28 1997-11-11 Intel Corporation Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction
US5968169A (en) 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
US5867701A (en) 1995-06-12 1999-02-02 Intel Corporation System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow
US5752069A (en) 1995-08-31 1998-05-12 Advanced Micro Devices, Inc. Superscalar microprocessor employing away prediction structure
US5634103A (en) 1995-11-09 1997-05-27 International Business Machines Corporation Method and system for minimizing branch misprediction penalties within a processor
US5864707A (en) 1995-12-11 1999-01-26 Advanced Micro Devices, Inc. Superscalar microprocessor configured to predict return addresses from a return stack storage
US5734881A (en) 1995-12-15 1998-03-31 Cyrix Corporation Detecting short branches in a prefetch buffer using target location information in a branch target cache
US5828901A (en) 1995-12-21 1998-10-27 Cirrus Logic, Inc. Method and apparatus for placing multiple frames of data in a buffer in a direct memory access transfer
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US5805877A (en) 1996-09-23 1998-09-08 Motorola, Inc. Data processor with branch target address cache and method of operation
US5850543A (en) 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
KR100240591B1 (ko) 1996-11-06 2000-03-02 김영환 분기명령어의 효율적인 처리를 위한 브랜치 타겟 버퍼 및 그를 이용한 분기 예측방법
US6088793A (en) 1996-12-30 2000-07-11 Intel Corporation Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor
DE69734093D1 (de) 1996-12-31 2005-10-06 Metaflow Technologies Inc System zur Ausführung von Gleitkommaoperationen
US5850532A (en) 1997-03-10 1998-12-15 Advanced Micro Devices, Inc. Invalid instruction scan unit for detecting invalid predecode data corresponding to instructions being fetched
TW357318B (en) 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
US6122729A (en) 1997-05-13 2000-09-19 Advanced Micro Devices, Inc. Prefetch buffer which stores a pointer indicating an initial predecode position
US6073230A (en) 1997-06-11 2000-06-06 Advanced Micro Devices, Inc. Instruction fetch unit configured to provide sequential way prediction for sequential instruction fetches
US5872946A (en) 1997-06-11 1999-02-16 Advanced Micro Devices, Inc. Instruction alignment unit employing dual instruction queues for high frequency instruction dispatch
US6157988A (en) 1997-08-01 2000-12-05 Micron Technology, Inc. Method and apparatus for high performance branching in pipelined microsystems
US6185676B1 (en) 1997-09-30 2001-02-06 Intel Corporation Method and apparatus for performing early branch prediction in a microprocessor
US5978909A (en) 1997-11-26 1999-11-02 Intel Corporation System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer
US6041405A (en) 1997-12-18 2000-03-21 Advanced Micro Devices, Inc. Instruction length prediction using an instruction length pattern detector
US5931944A (en) 1997-12-23 1999-08-03 Intel Corporation Branch instruction handling in a self-timed marking system
US6081884A (en) 1998-01-05 2000-06-27 Advanced Micro Devices, Inc. Embedding two different instruction sets within a single long instruction word using predecode bits
US5974543A (en) 1998-01-23 1999-10-26 International Business Machines Corporation Apparatus and method for performing subroutine call and return operations
US5881260A (en) 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
US6151671A (en) 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6108773A (en) 1998-03-31 2000-08-22 Ip-First, Llc Apparatus and method for branch target address calculation during instruction decode
US6256727B1 (en) 1998-05-12 2001-07-03 International Business Machines Corporation Method and system for fetching noncontiguous instructions in a single clock cycle
US6260138B1 (en) 1998-07-17 2001-07-10 Sun Microsystems, Inc. Method and apparatus for branch instruction processing in a processor
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6134654A (en) 1998-09-16 2000-10-17 Sun Microsystems, Inc. Bi-level branch target prediction scheme with fetch address prediction
US6279106B1 (en) 1998-09-21 2001-08-21 Advanced Micro Devices, Inc. Method for reducing branch target storage by calculating direct branch targets on the fly
US6279105B1 (en) 1998-10-15 2001-08-21 International Business Machines Corporation Pipelined two-cycle branch target address cache
US6170054B1 (en) 1998-11-16 2001-01-02 Intel Corporation Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US6175897B1 (en) 1998-12-28 2001-01-16 Bull Hn Information Systems Inc. Synchronization of branch cache searches and allocation/modification/deletion of branch cache
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US6314514B1 (en) 1999-03-18 2001-11-06 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions
US6233676B1 (en) 1999-03-18 2001-05-15 Ip-First, L.L.C. Apparatus and method for fast forward branch
EP1050810A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA A computer system comprising multiple functional units
US6321321B1 (en) 1999-06-21 2001-11-20 Vlsi Technology, Inc. Set-associative cache-management method with parallel and single-set sequential reads
US6457120B1 (en) 1999-11-01 2002-09-24 International Business Machines Corporation Processor and method including a cache having confirmation bits for improving address predictable branch instruction target predictions
US6748441B1 (en) 1999-12-02 2004-06-08 Microsoft Corporation Data carousel receiving and caching
US6560696B1 (en) 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor
US6502185B1 (en) 2000-01-03 2002-12-31 Advanced Micro Devices, Inc. Pipeline elements which verify predecode information
US6351796B1 (en) * 2000-02-22 2002-02-26 Hewlett-Packard Company Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache
US6754808B1 (en) 2000-09-29 2004-06-22 Intel Corporation Valid bit generation and tracking in a pipelined processor
US7165168B2 (en) 2003-01-14 2007-01-16 Ip-First, Llc Microprocessor with branch target address cache update queue
US6823444B1 (en) 2001-07-03 2004-11-23 Ip-First, Llc Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap
US7162619B2 (en) 2001-07-03 2007-01-09 Ip-First, Llc Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer
US7203824B2 (en) 2001-07-03 2007-04-10 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US6898699B2 (en) 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7159097B2 (en) 2002-04-26 2007-01-02 Ip-First, Llc Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts
US6968444B1 (en) 2002-11-04 2005-11-22 Advanced Micro Devices, Inc. Microprocessor employing a fixed position dispatch unit
US7152154B2 (en) 2003-01-16 2006-12-19 Ip-First, Llc. Apparatus and method for invalidation of redundant branch target address cache entries
US7185186B2 (en) 2003-01-14 2007-02-27 Ip-First, Llc Apparatus and method for resolving deadlock fetch conditions involving branch target address cache
US7143269B2 (en) 2003-01-14 2006-11-28 Ip-First, Llc Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor
US7178010B2 (en) 2003-01-16 2007-02-13 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack
US7237098B2 (en) 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置
CN101876891A (zh) * 2009-02-12 2010-11-03 威盛电子股份有限公司 微处理器以及快速执行条件分支指令的方法
CN101819522A (zh) * 2009-03-04 2010-09-01 威盛电子股份有限公司 微处理器以及相关指令解析的方法
CN101819522B (zh) * 2009-03-04 2012-12-12 威盛电子股份有限公司 微处理器以及相关指令解析的方法
CN104471529A (zh) * 2012-06-25 2015-03-25 高通股份有限公司 用以扩展软件分支目标提示的方法及设备
CN104471529B (zh) * 2012-06-25 2018-06-01 高通股份有限公司 用以扩展软件分支目标提示的方法及设备
CN104020982B (zh) * 2013-03-01 2018-06-15 Mips技术公司 具有高效返回预测能力的分支目标缓冲器
CN104020982A (zh) * 2013-03-01 2014-09-03 Mips技术公司 具有高效返回预测能力的分支目标缓冲器
CN104049938B (zh) * 2013-03-13 2017-05-03 想象力科技有限公司 间接分支预测
US9792123B2 (en) 2013-03-13 2017-10-17 Imagination Technologies Limited Indirect branch prediction
CN104049938A (zh) * 2013-03-13 2014-09-17 想象力科技有限公司 间接分支预测
US10261798B2 (en) 2013-03-13 2019-04-16 MIPS Tech, LLC Indirect branch prediction
CN106030516A (zh) * 2013-10-25 2016-10-12 超威半导体公司 分支预测单元和1级指令高速缓存中的带宽增加
CN106030516B (zh) * 2013-10-25 2019-09-03 超威半导体公司 一种处理器和用于在处理器中执行分支预测的方法
CN106843816A (zh) * 2017-01-23 2017-06-13 青岛朗思信息科技有限公司 一种分支预测控制方法及装置
CN106843816B (zh) * 2017-01-23 2019-06-18 青岛专用集成电路设计工程技术研究中心 一种分支预测控制方法及装置
CN114008581A (zh) * 2019-07-31 2022-02-01 美光科技公司 用以加速推测性执行的备用高速缓存集合
CN114008581B (zh) * 2019-07-31 2024-04-02 美光科技公司 用以加速推测性执行的备用高速缓存集合

Also Published As

Publication number Publication date
US7165169B2 (en) 2007-01-16
CN1260646C (zh) 2006-06-21
TW523712B (en) 2003-03-11
US20020194464A1 (en) 2002-12-19

Similar Documents

Publication Publication Date Title
CN1260646C (zh) 附有第二预测装置的假想分支目标地址高速缓存
CN1220938C (zh) 双调用/返回堆栈分支预测系统
CN1217262C (zh) 假想分支目标地址高速缓存中置换目标地址的装置及方法
CN1260645C (zh) 假想混合分支方向预测装置和方法
CN1257452C (zh) 假想分支目标地址高速缓存分支的装置、系统及方法
CN1217271C (zh) 假想分支目标地址高速缓存
CN1269030C (zh) 高速缓存的快取线选取目标地址的装置及方法
CN1303536C (zh) 执行自高速缓存的快速推测式加载运算的微处理器及方法
CN1632877A (zh) 可变延滞时间堆栈快取存储器及提供资料的方法
CN1641607A (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
CN1202470C (zh) 处理器
CN1153155C (zh) 装有高效利用主处理器中的寄存器数据的协处理器的信息处理装置
CN1625731A (zh) 具有多种长度指令集体系结构的可配置数据处理器
CN1641567A (zh) 自堆栈快取存储器进行快速推测性弹出操作方法及装置
CN1934543A (zh) 高速缓冲存储器及其控制方法
CN1629801A (zh) 产生早期指令结果的管线式微处理器、装置以及方法
CN1469241A (zh) 处理器、程序变换装置和变换方法以及计算机程序
CN1664777A (zh) 用于控制信息处理设备的内部状态的装置和方法
CN1269052C (zh) 支持缩小代码长度的常量还原型处理器
CN1137421C (zh) 可编程控制器
CN1114153C (zh) 支持程序编码长度减小的微处理器
CN1016383B (zh) 基于操作数长度和对位的微码转移
CN1491383A (zh) 使用协处理器的数据处理
CN1152300C (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1627252A (zh) 微处理机与随机存取快取记忆体的快速弹出装置及其方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20060621

CX01 Expiry of patent term