CN1397878A - 假想混合分支方向预测装置 - Google Patents

假想混合分支方向预测装置 Download PDF

Info

Publication number
CN1397878A
CN1397878A CN02118554A CN02118554A CN1397878A CN 1397878 A CN1397878 A CN 1397878A CN 02118554 A CN02118554 A CN 02118554A CN 02118554 A CN02118554 A CN 02118554A CN 1397878 A CN1397878 A CN 1397878A
Authority
CN
China
Prior art keywords
branch
instruction
address
prediction
imaginary
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
CN02118554A
Other languages
English (en)
Other versions
CN1260645C (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 CN1397878A publication Critical patent/CN1397878A/zh
Application granted granted Critical
Publication of CN1260645C publication Critical patent/CN1260645C/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30054Unconditional branch instructions
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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

本发明涉及一种在一流水线化微处理器中以混合方式假想预测分支指令的方向的装置,一分支目标地址高速缓存(BTAC)用以储存关于已执行的分支指令的一方向预测。该BTAC由一指令高速缓存的提取地址作索引。该BTAC与指令高速缓存并行被存取,以使在真正的指令被译码前就已提供该方向预测,该指令系对应于存在BTAC的方向预测而被假定为一分支指令。并行于BTAC的存取,一分支历史表(BHT)亦被存取,以提供第二假想方向预测。该BHT以该指令高速缓存提取地址与一存于全域分支历史缓存器的全域分支历史的gshare函数作索引。该BTAC亦提供一选择器,用以在两个假想方向预测间做选择。

Description

假想混合分支方向预测装置
相关申请案的交互参照
[0001]本申请案与下列美国专利申请有关,具有相同的申请日与申请人。通过完整地参考每个申请案,可用于任何目的将其纳入本申请案中:
    Docket#         专利名称
    CNTR:2021 假想分支目标地址高速缓存
    CNTR:2022 用于侦测与更正错误的假想分支目标地址高速缓存分支之装置、系统及方法
    CNTR:2050 双呼叫/返回堆栈分支预测系统
    CNTR:2052 附有由第二预测装置依据分支指令类型进行的选择性覆盖的假想分支目标地址高速缓存
    CNTR:2062 依据指令高速缓存之快取线选取储存于一假想分支目标地址高速缓存的多个目标地址其中之一的装置及方法
    CNTR:2063 在假想分支目标地址高速缓存中置换目标地址的装置及方法
技术领域
[0002]本发明涉及微处理器(microprocessor)的分支预测(branchprediction)的技术领域,尤指分支目标地址(branch target address)的快取技术,特别涉及一种假想混合分支方向预测装置。
背景技术
[0003]计算机指令一般都储存于内存内可寻址的相连位置。中央处理单元(Central Processing Unit,CPU)或处理器由相连的内存位置提取这些指令,并加以执行。CPU从内存每提取一个指令,其内的程序计数器(program counter,简称PC)或指令指针(instruction pointer,简称IP)就会递增,使其内含序列(sequence)中下个指令的地址,此即为下个循序指令指针(next sequential instruction pointer,简称NSIP)。指令的提取、程序计数器的递增以及指令的执行便通过内存呈线性持续进行,直到遇到程控指令(program control instruction)为止。
[0004]程控指令也称为分支指令(branch instruction),在执行时会改变程序计数器内的地址,并改变控制的流程。换言之,分支指令指定了改变程序计数器内容的条件。因执行一分支指令使程序计数器的值改变,会导致指令执行顺序的中断。这是数字计算机的一项重要特征,因为它提供对程序执行流程的控制,以及分支至程序的不同部分的能力。程控指令的例子包括跳转(jump)、条件跳转(conditional jump)、调用(call)以及返回(return)。
[0005]跳转指令使CPU无条件地将程序计数器的内容改变至一特定值,这个值就是程序要继续执行的指令所在的目标地址。条件跳转指令使CPU去测试一状态缓存器(status register)的内容,或者可能比较两个值,而后基于测试或比较的结果,不是继续循序执行就是跳转至一新地址,称为目标地址。调用指令使CPU无条件地跳转至一新目标地址,而且储存程序计数器的值以使CPU可返回至先前离开的程序位置。返回指令使CPU去撷取程序计数器于前次调用指令执行时所存的值,并使程序流程返回至所撷取的指令地址。
[0006]对早期的微处理器而言,程控指令的执行并不会造成处理上显著的延迟,因为这些微处理器被设计为一次只执行一个指令。如果所执行的指令是程控指令,在执行完毕之前,微处理器会知道它是否要分支,而如果是的话,它会知道分支的目标地址为何。因此,不论下个指令是循序的,或是分支的结果,皆会被提取和执行。
[0007]现代的微处理器则非如此单纯。相反地,对现代的微处理器来说,在微处理器的不同区块或流水线阶段(pipeline stage)内同时处理数个指令乃很平常的事。Hennessy与Patterson将流水线化(pipelining)定义为“一种多个指令得以重叠执行的实作技术。”(引述自 Computer Architecture:A Quantitative Approach,2nd edition,by John L. Hennessy and David A.Patterson,Morgan KaufmannPublishers,San Francisco,CA,1996)作者接着对流水线化做了下列精彩的说明:
[0008]“一个流水线就像是条装配线。在汽车的装配线上,有许多步骤,每个步骤对汽车的制造都有所贡献。每个步骤与其它步骤同时并行,然而是在不同的汽车上进行。在一计算机流水线中,每个步骤完成一个指令的部分,就像装配线,不同的步骤并行地完成不同指令的不同部分。每个这些步骤称为一管道阶段(pipe stage)或管道区段(pipe segment)。这些阶段一个连接着下一个,形成一个管道——指令从一端进入,历经这些阶段,然后从另一端出去,就像汽车在装配线上一样。”
[0009]因此,当指令被提取时,就被导入流水线的一端。指令于微处理器中历史流水线阶段,直到执行完毕。在这种流水线化的微处理器中,一分支指令是否会改变程序流程,通常都得等它到达流水线的后期阶段才能得知。然而在这之前,微处理器已经提取了其它指令,且正于流水线的早期阶段执行。如果一分支指令改变了程序流程,所有在这分支指令之后进入流水线的指令都必须被丢弃。此外,则必须提取此分支指令的目标地址上的指令。丢弃已在执行中的指令及提取目标地址上的指令,会造成微处理器在处理上的延迟,称为分支惩罚(branch penalty)。
[0010]为减轻这种延迟问题,许多流水线化的微处理器在流水线的一早期阶段使用分支预测机制来预测分支指令。分支预测机制预测分支指令的结果或方向,即是否要进行分支。分支预测机制也预测分支指令的分支目标地址,即分支指令所要分支到的指令的地址。处理器接着就分支至所预测的分支目标地址,即依据分支预测提取后续的指令,这会比没有分支预测时来得早,因而若确定要进行分支,因此便降低了惩罚的可能性。
[0011]这种用来快取先前所执行分支指令的目标地址的分支预测机制,称为分支目标地址高速缓存(branch target address cache,简称BTAC)或者分支目标缓冲器(branch target buffer,简称BTB)。在一简单的BTAC或BTB中,当处理器对一分支指令进行译码后,处理器便提供分支指令的地址给BTAC。若该地址命中BTAC且预测分支会进行,处理器就可以利用BTAC中的快取目标地址开始提取目标地址的指令,而非下个循序(sequential)地址的指令。
[0012]相较于只预测是否采用分支的预测装置,像是分支历史表(branch history table,简称BHT),BTAC的好处是除了确定是否遇到一分支指令所需的时间外,它节省了计算目标地址所需的时间。典型的做法是分支预测数据(例如被采用/不被采用(taken/not taken))随着目标地址皆储存于BTAC。BTAC运用于流水线的指令译码阶段,这是因为处理器必须先判断分支指令是否存在。
[0013]处理器使用BTB的一个例子是Intel Pentium II与PentiumIII处理器。现请参阅图1,其绘示Pentium II/III处理器100相关部分的方块图。处理器100包括一BTB 134,用来快取分支目标地址。处理器100从一指令高速缓存(instruction cache)102提取指令,该指令高速缓存102快取了指令108与前译码(pre-decoded)分支预测数据104。前译码分支预测数据104可能包括像是指令类型或指令长度这样的讯息。指令从指令高速缓存102提取,并送到指令译码逻辑(instructiondecode logic)132,由其来译码或解译指令。
[0014]一般是从下个循序提取地址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。
[0015]Pentium II/III在检索BTB 134时,并非通过分支指令本身的指令指针,而是利用先于被预测的分支指令的指令的指令指针138来进行。这使得BTB 134在分支指令被译码的时,就能查询目标地址136。否则,在分支指令译码后,处理器100必须再等待BTB 134的查询,才能进行分支,这样便多了此延迟的分支惩罚。一旦分支指令被指令译码逻辑132译码,且处理器100知道目标地址136的产生是基于确定有分支指令的存在,处理器100才会分支到BTB 134根据指令指针138索引所提供的目标地址136。
[0016]另一个使用BTAC的例子是AMD Athlon处理器。现请参阅图2,其绘示Athlon处理器200相关部分的方块图。处理器200包括与图1Pentium II/III编号类似的组件。Athlon处理器200将其BTAC整合进指令高速缓存202中。也就是,指令高速缓存202除了指令资料108与前译码分支预测数据104的外,还快取了分支目标地址206。对于每个指令字节对(instruction byte pair),指令高速缓存202保留了两个位作为预测分支指令的方向的用。指令高速缓存202在一快取线中,相当于每16个字节的指令即保留两个分支目标地址的空间。
[0017]从图2可以看出,指令高速缓存202是由提取地址下个循序提取地址来作索引。因BTAC已整合进指令高速缓存202,所以也是由提取地址122来作索引。因此,指令高速缓存202的一快取线若有一命中发生,就可确定快取分支目标地址对应至存在于被检索的指令高速缓存202快取线中一分支指令。
[0018]虽然现有的方法改进了分支预测,但仍有缺点。前述两种现有方法的一个缺点是,指令前译码数据以及Athlon例子中的分支目标地址大幅增加了指令高速缓存的大小。据推测,对Athlon而言,分支预测数据可能使指令高速缓存的大小加倍。此外,Pentium II/III BTB为每个分支指令储存了相当大量的分支历史数据,用以预测分支方向,因而也增加了BTB的大小。
[0019]Athlon的整合式BTAC的一个缺点是,将BTAC整合进指令高速缓存会使空间的使用缺乏效率。也就是,整合式的指令高速缓存/BTAC对于分支指令以及非分支指令,皆须快取其分支指令数据,因而占用过多储存空间。在Athlon指令高速缓存中,许多由额外的分支预测数据所使用的空间是浪费掉的,这是因为指令高速缓存中分支指令的集中度相当低。例如,一特定的指令快取线中可能未包括任何分支,因此快取线中所有储存目标地址与其它分支预测数据的空间就没用到而浪费掉了。
[0020]Athlon整合式的BTAC的另一个缺点是,设计目标间的冲突。也就是,关于指令高速缓存的大小,除了分支预测机制的设计目标外,可能有其它不同的设计目标会对此加以规定。以快取线而论,要求BTAC的大小要与指令高速缓存相同,是Athlon架构所固有的,但可能无法理想地达到两组设计目标。例如,可能选定了指令高速缓存的大小,以达成一特定的快取命中率(cache-hit ratio)。然而,情况可能是,用比较小的BTAC,就可能达成所要的分支目标地址预测率(prediction rate)。
[0021]再者,因为BTAC是整合在指令高速缓存中,获得快取分支目标地址所需的资料存取时间必然相同于获得快取指令字节。Athlon的例子中,指令高速缓存相当大,存取时间可能会相当长。较小的、非整合式BTAC的资料存取时间可能比整合式的指令高速缓存/BTAC要明显减少。
[0022]由于Pentium II/III BTB并未整合在指令高速缓存中,Pentium II/III的方法不会遭遇前述Athlon整合式指令高速缓存/BTAC的问题。然而,由于在检索Pentium II/III BTB时,乃利用一已译码指令的指令指针,而非指令高速缓存的提取地址,所以Pentium II/III的解决方案于进行分支时可能无法像Athlon解决方案那样早,因此可能也无法那样有效地减少分支惩罚。Pentium II/III解决方案处理这个问题的方式是,使用一先前指令或先前指令群的指令指针,而非实际的分支指令指针,来检索BTB,如前所述。
[0023]然而,Pentium II/III方法的一个缺点是,使用先前指令的指令指针而非实际的分支指令指针,会牺牲掉一些分支预测的准确度。准确度的降低,一部份是由于分支指令在程序中可能经由多个指令路径遭遇到。也就是,多个先于分支指令的指令可能因相同的分支指令而快取于BTB中。因此,为了这样一个分支指令,必须消耗掉BTB中多个项目(entry),于是就减少了BTB中可快取的分支指令总数。所用的先于分支指令的指令数量愈多,可到达分支指令的路径也愈多。
[0024]除此之外,由于使用一先前的指令指针造成可能有多个路径到达同一个分支指令,Pentium II/III BTB中的方向预测装置可能需要更长的时间来“暖机”(warm up)。Pentium II/III BTB保持着分支历史数据,用以预测分支的方向。当一新的分支指令被引入处理器且快取住,到达该分支指令的多个路径可能会使分支历史在更新时,变得比只有单一路径到达该分支指令的情形还慢,造成预测较不准确。
[0025]因此,我们所需要的是,一种能有效利用芯片固有资源(chipreal estate),又能在流水线早期就提供准确分支的分支预测装置,以减少分支惩罚。
发明内容
[0026]本发明的目的在于提供一种分支预测方法及装置,能有效利用芯片固有资源,又能在流水线早期就提供准确的分支,以减少分支惩罚。于是,为达到前述目的,本发明的一项特征是,在一微处理器中提供一种分支装置,利用一提取地址选取一指令高速缓存的一快取线。该装置亦使用该提取地址假想预测一分支指令是否将被采用(taken)。该分支指令可能潜在地(potentially)存在于该指令快取线中。该装置包括一第一预测装置(predictor),对应至该提取地址,以依据该提取地址预测该分支指令是否将被采用。该装置亦包括一逻辑,对应至该提取地址,以提供该提取地址与一全域分支历史(global branch history)的一二进制函数(binary function)于此逻辑的一输出端。该装置亦包括一第二预测装置,对应至该逻辑的输出端,以依据该逻辑输出预测该分支指令是否将被采用。该装置亦包括一选择器(selector),对应至该提取地址,以依据该提取地址选取该第一与第二预测装置其中之一。
[0027]另一方面,本发明的一项特征是,在一具有一指令高速缓存的流水线化微处理器中提供一种假想分支预测装置。该指令高速缓存接收一地址总线(address bus)上的一提取地址,以选取该指令高速缓存的一快取线。一分支指令被假定存在于该快取线中。该装置包括一假想分支历史表(BHT),提供该分支指令的一第一方向预测。该装置亦包括一分支目标地址高速缓存(BTAC),对应至该地址总线,提供该分支指令的一第二方向预测,并提供一选择预测,用以在第一与第二方向预测间作选择。该装置亦包括一多工器,对应至该BHT与该BTAC,依据该选择预测选取第一与第二方向预测其中之一。第二方向预测系响应该提取地址而提供,即使该分支指令可能并不存在于该指令快取线中。
[0028]另一方面,本发明的一项特征是,在一微处理器中提供一假想分支目标地址高速缓存(BTAC)。该BTAC包括一数组(array),以储存分支指令的方向预测。该BTAC亦包括一输入,对应至该数组,接收一指令高速缓存的提取地址。该提取地址检索该数组以选取方向预测其中之一。该BTAC亦包括一输出,对应至该数组,提供所选取的方向预测至分支控制逻辑(branch control logic)。若所选取的方向预测指定一采用方向,则不管是否有一分支指令存在于提取地址所检索的指令高速缓存的一快取线中,该分支控制逻辑皆使微处理器进行假想分支。
[0029]另一方面,本发明的一项特征是,提供一种用于假想分支的微处理器。该微处理器包括一指令高速缓存,以提供一地址总线上的一提取地址所选取的一指令字节线(line of instruction bytes)。该微处理器亦包括一假想分支历史表(BHT),对应至该地址总线,提供一分支指令是否将被采用的一第一预测,该分支指令被假定存在于该指令快取线。该第一预测系依据该提取地址与一全域分支历史的组合而提供。该微处理器亦包括一假想分支目标地址高速缓存(BTAC),对应至该地址总线,以提供该假定的分支指令的一第二预测,并提供一选择器。该微处理器亦包括控制逻辑,对应至该BHT与BTAC,若选择器所选取的第一与第二预测其中之一预测该假定的分支指令将被采用,则使微处理器进行假想分支。
[0030]另一方面,本发明的一项特征是,提供一种在一微处理器中进行假想分支的方法。该方法包括产生一指令的数个假想分支方向预测,选取该数个假想分支方向预测的一作为一最后(final)方向预测,以及若该最后方向预测指出该指令将被采用,则使微处理器进行假想分支。该产生、选取以及假想分支的动作皆在译码该指令之前执行。
[0031]另一方面,本发明的一项特征是,提供一种在一微处理器中进行假想分支的方法。该方法包括产生一分支指令是否将被采用的第一与第二预测,以响应于一指令高速缓存提取地址的第一与第二二进制函数。该方法亦包括选取该第一与第二预测其中之一作为一最后预测。该选取的动作是响应该提取地址的一第三二进制函数而执行。该方法亦包括若该最后预测指出该分支指令将被采用,则微处理器即进行假想分支。不论该分支指令是否存在于该提取地址所选取的一指令快取线中,该产生、选取以及假想分支的动作皆被执行。
[0032]本发明的一项优点是,提供一种混合的方式,以对于混杂高度不相依(independent)与高度相依(dependent)的分支,假想地预测其分支方向,以改进假想分支的方向预测的准确性,用来降低整体的分支惩罚。
[0033]本发明的其它特征与优点,在考察本说明书其余部分与附图后,将可更加明白。
附图说明
图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      Pentium II/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     信号
具体实施方式
[0053]现请参阅图3,其绘示本发明的一流水线化微处理器300的方块图。处理器流水线300包括阶段302至阶段332。
[0054]第一阶段是I-阶段302,或称指令提取阶段(instructionfetch stage)。在I-阶段302,处理器300提供提取地址至一指令高速缓存432(见图4),以提取指令供处理器300执行。指令高速缓存432在关于图4的部分时会更加详细地说明。在一具体实施例中,此指令高速缓存432是一双周期(two-cycle)高速缓存。B-阶段304是指令高速缓存432的存取的第二阶段。指令高速缓存432提供其资料至U-阶段306,在此阶段资料被闩锁住(latched)。U-阶段306提供指令高速缓存的资料至V-阶段308。
[0055]在本发明中,处理器300还包括一BTAC 402(见图4),在其余图标的部分会详细说明。BTAC 402并未整合在指令高速缓存432。然而,在I-阶段302,BTAC 402是与指令高速缓存432通过使用指令高速缓存432的提取地址495来平行地(in parallel)存取的(见图4),从而致能相当快速的分支以减少分支惩罚。BTAC 402提供一假想分支目标地址352,而该地址则被提供至I-阶段302。处理器300选择性地选取目标地址352作为指令高速缓存432提取地址,以达成分支至假想目标地址352,这在其余图标的部分会详加说明。
[0056]有利地,从图3可以看出,在U-阶段306,由BTAC 402所提供的分支目标地址352能使处理器300在流水线300的相当早期就进行分支,如此仅产生一双周期的指令泡沫(instruction bubble)。即,若处理器300分支至假想目标地址352,只有两个阶段的指令必须被清除。换言之,在两个周期内,典型的情况下,于U-阶段306就可得知分支的目标指令,即,如果这些目标指令存在于指令高速缓存432中。
[0057]有利地,在多数情况下,双周期的指令泡沫够小,可以由一指令缓冲器342、F-阶段指令序列344及/或X-阶段指令序列346来加以吸收,此将说明于后。因此,在许多情形下,假想BTAC 402使处理器300能达到零惩罚的分支。
[0058]处理器300还包括一假想调用/返回堆栈406(见图4),在关于图4、图8与图13的部分有详细说明。假想调用/返回堆栈406与假想BTAC 402协同运作,以产生一假想返回地址353,即,提供至I-阶段302的返回指令的目标地址。处理器300选择性地选取假想返回地址353作为指令高速缓存432提取地址,以达成分支至假想返回地址353,就如关于图8部分所详细说明的。
[0059]在V-阶段308,指令被写入指令缓冲器342。指令缓冲器342暂存指令以提供至F-阶段312。V-阶段308亦包括译码逻辑,以提供关于指令字节的数据给指令缓冲器342,像是x86前置(prefix)与mod R/M数据,以及指令字节是否为分支运算码值(branch opcode value)。
[0060]F-阶段312,或称指令格式化阶段(instruction formatstage)312,包括指令格式化与译码逻辑436(见图4)以格式化指令。最好(preferably)处理器300是一x86处理器,其指令集(instructionset)可容许不同长度的指令。指令格式化逻辑436从指令缓冲器342接收指令字节流(stream),并将该指令字节流解析成分离的字节群,每个群构成一x86指令,尤其还提供每个指令的长度。
[0061]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两者之一,就如下文所详细说明的。
[0062]F-阶段指令序列344接收格式化的指令。格式化指令由F-阶段指令序列344送至X-阶段314中一指令转换器(instructiontranslator)。
[0063]X-阶段314,或称转换阶段314,指令转换器将x86巨指令(macroinstruction)转换成微指令(microinstruction),让其余的流水线阶段可加以执行。X-阶段314将转换过的微指令送至X-阶段指令序列346。
[0064]X-阶段指令序列346将转换过的微指令送至R-阶段316,或称缓存器阶段316。R-阶段316包括使用者可见(user-visible)的x86缓存器集合,以及非使用者可见的缓存器。微指令的指令操作数(operand)存于R-阶段316缓存器,供流水线300的后续阶段执行微指令。
[0065]A-阶段318,或称地址阶段(address stage)318,包括地址产生逻辑(address generation logic),从R-阶段316接收操作数与微指令,并产生微指令所需的地址,像是用以加载/储存的内存地址。
[0066]D-阶段322,或称资料阶段(data stage)322,包括存取资料的逻辑,该资料由A-阶段318产生的地址所指定。特别是,D-阶段322包括一资料高速缓存,用来快取处理器300内从系统内存而来的数据。在一具体实施例中,数据高速缓存是双周期高速缓存。G-阶段324是资料高速缓存存取的第二阶段,而在E-阶段326,可取得资料高速缓存的资料。
[0067]E-阶段326,或称执行阶段(execution stage)326,包括执行逻辑(execution logic),像是算数逻辑单元(arithmeticlogic unit),依据先前阶段提供的资料及操作数执行微指令。特别是,E-阶段326会产生BTAC 402指出一返回指令可能存在于由提取地址495指定的指令高速缓存432快取线中所有分支指令的解析(resolved)目标地址356。即,E-阶段326目标地址356被认为是所有分支指令的正确目标地址,所有预测的目标地址必须与其匹配。此外,E-阶段326产生一所有分支指令的解析方向(DIR)481(见图4)。
[0068]S-阶段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的部分所描述的。
[0069]W-阶段332,或称回写阶段(write-back stage),将S-阶段328处理的结果回写入R-阶段316缓存器,用来更新处理器300的状态。
[0070]指令缓冲器342、F-阶段指令序列344以及X-阶段指令序列346除了别的功能外,还能将分支对于处理器300每个指令值的脉冲所造成的冲击减至最小。
[0071]现请参阅图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部分会更详细地说明。
[0072]现请参照图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。
[0073]指令高速缓存432包括一快取指令字节的数据数组506。资料数组506配置成数条快取线,以虚拟提取地址495的一部份来作索引。在一具体实施例中,数据数组506储存了64KB的指令字节,其以32个字节的快取线来配置。在一具体实施例中,指令高速缓存432是一四路集合关联高速缓存(4-way set associative cache)。因此,资料数组506包括512条指令字节线,以提取地址495的位[13:5]来作索引。
[0074]虚拟提取地址495所选取的指令字节线494,由指令高速缓存432输出至指令缓冲器342,如图4所示。在一具体实施例中,一次将选定的指令字节线的一半送至指令缓冲器342,即,分成两周期,每周期送16个字节。在本说明书中,快取线或指令位线可用以指称由提取地址495于指令高速缓存432内所选定的一快取线的部分,像是半快取线(half-cache line)或其它再细分的部分。
[0075]指令高速缓存432亦包括一快取标志的标志数组(tag array)504。标志数组504,如同数据数组506,皆由虚拟提取地址495的相同位来作索引。实际地址的位快取于标志数组504,作为实际标志。由提取地址495位选定的实际标志514则送至标志数组504的输出端。
[0076]指令高速缓存432亦包括一比较器508,将实际标志514与TLB502所提供的实际分页号码512作比较,以产生一命中信号(hit signal)518,指明虚拟提取地址495是否命中指令高速缓存432。命中信号518真正指出了是否有快取现行的工作指令(task instruction),因为指令高速缓存432将虚拟提取地址495转换为一实际地址,并用此实际地址来测定是否有命中。
[0077]前述指令高速缓存432的运作与BTAC 402的运作成对比,后者仅依虚拟地址,即提取地址495,来测定是否命中,而非依据实际地址。此种运作上不同所造成的结果是,虚拟别名化(virtual aliasing)可能会发生,以致于BTAC 402产生错误的目标地址352,如下所述。
[0078]请再参阅图4,图3的指令缓冲器342从指令高速缓存432接收快取线的指令字节494并予以缓冲,直至其被格式化与转换为止。如前文关于图3的V-阶段308所述,指令缓冲器342也储存了其它分支预测的相关数据,像是x86前置与mod R/M数据,以及指令字节是否为分支运算码值。
[0079]此外,指令缓冲器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。
[0080]指令译码逻辑436从指令缓冲器342接收指令字节493(包括分支指令字节)以将其译码,产生指令译码数据492。指令译码数据492用来进行分支指令预测,以及侦测与更正错误的假想分支。指令译码逻辑436提供指令译码数据492至流水线300的后段。此外,指令译码逻辑436在译码现行指令时,会产生下个循序指令指针(NSIP)466以及现行指令指针(current instruction pointer,CIP)468。此外,指令译码逻辑436提供指令译码数据492至非假想目标地址计算器(non-speculativetarget address calculator)416、非假想调用/返回堆栈414以及非假想分支方向预测装置(non-speculative branch direction predictor)412。最好(preferably)非假想调用/返回堆栈414、非假想分支方向预测装置412以及非假想目标地址计算器416属于流水线300的F-阶段312。
[0081]非假想分支方向预测装置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。
[0082]非假想调用/返回堆栈414产生图3的非假想返回地址355,以响应从指令译码逻辑436接收的指令译码数据492。除了别的以外,指令译码数据492还指明现行译码的指令是否为调用指令、返回指令或两者皆否。
[0083]此外,如果正由指令译码逻辑436译码的指令为一调用指令,指令译码数据492还会包括一返回地址488。最好(preferably)返回地址488包括现行译码的调用指令的指令指针加上调用指令的长度所得的值。当指令译码数据492显示现行译码的指令为一调用指令时,返回地址488会被推入非假想调用/返回堆栈414,如此在指令译码逻辑436进行后续返回指令的译码时,返回地址488就能做为非假想返回地址355。
[0084]非假想调用/返回堆栈414的一个示范实施例详述于美国专利申请序号09/271,591  METHOD AND APPARATUS FOR CORRECTING AN INTERNAL CALL/RETURN STACK IN A MICROPROCESSOR THAT SPECULATIVELY EXECUTES CALL AND RETURN INSTRUCTIONS,具有一共同申请人,通过参考此案可并入本发明。
[0085]非假想目标地址计算器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,具有一共同申请人,通过参考此案可并入本发明。
[0086]分支预测装置400包括假想分支目标地址高速缓存(BTAC)402。BTAC 402通过提取地址总线上的提取地址495进行寻址,检索BTAC402内一快取线。BTAC 402并未整合在指令高速缓存432,而是分离且不同于指令高速缓存432,如图所示。也就是,BTAC 402与指令高速缓存432在实际上与概念上皆有所区别。BTAC 402与指令高速缓存432实际上的区别,在于两者在处理器300内处于不同的空间位置。BTAC 402与指令高速缓存432概念上的区别,在于两者具有不同的大小,即在一具体实施例中,它们包括不同数量的快取线。BTAC 402与指令高速缓存432概念上的区别,也在于指令高速缓存432将提取地址495转换成实际地址,以决定指令字节线的命中与否;BTAC 402却以虚拟提取地址495作为一虚拟地址来作索引,而没有将其转换为实际地址。
[0087]最好(preferably)BTAC 402属于流水线300的I-阶段302。BTAC 402快取了先前执行分支指令的目标地址。当处理器300执行一分支指令时,该分支指令的解析目标地址通过更新信号442快取于BTAC402。该分支指令的指令指针1512(见图15)用来更新BTAC 402,如下文关于图15部分所描述的。
[0088]为了产生图3的快取分支目标地址352,BTAC 402连同指令高速缓存432皆由指令高速缓存432的提取地址495平行地(inparallel)检索。BTAC 402响应提取地址495而提供假想分支目标地址352。最好(preferably)提取地址495的32个位全都用来从BTAC 402选取假想目标地址352,如下文将更详细叙述的,主要是关于图6到图9的部分。假想分支目标地址352被送至包括一多工器422的地址选择逻辑422。
[0089]多工器422从数个地址(包括BTAC 402目标地址352)中选取提取地址495,下文将会予以讨论。多工器422输出提取地址495至指令高速缓存432与BTAC 402。若多工器422选取了BTAC 402目标地址352,接着处理器300便会分支到BTAC 402目标地址352。也就是,处理器300将开始从指令高速缓存432提取位于BTAC 402目标地址352的指令。
[0090]在一具体实施例中,BTAC 402比指令高速缓存432还小。特别是,BTAC 402快取目标地址所用的快取线数量比指令高速缓存432所含的还少。BTAC 402未整合在指令高速缓存432的结果是(虽然使用指令高速缓存432的提取地址495作为索引),若处理器300分支至BTAC 402所产生的目标地址352,它是以假想方式进行的。此分支是假想的,乃因根本无法确定在所选定的指令高速缓存432快取线中,是否有一分支指令存在,更别说是目标地址352因的而被快取的分支指令了。命中BTAC 402仅表示一分支指令先前存在于提取地址495所选取的指令高速缓存432快取线中。之所以无法确定一分支指令是否存在于所选取的快取线中,至少有两个理由。
[0091]无法确定一分支指令是否在提取地址495所检索的指令高速缓存432快取线中,其第一个理由是提取地址495是一虚拟地址;因此,虚拟别名化可能会发生。也就是,两个不同的实际地址可能对应到相同的虚拟提取地址495。一给定的提取地址495,其为虚拟的,可能转换成两个不同的实际地址,这两个地址关联于一多工(multitasking)处理器(像是处理器300)的两个不同行程或工作。指令高速缓存432利用图5的转换参照缓冲器502执行虚拟到实际的转换工作,以提供准确的指令资料。然而,BTAC 402依据虚拟提取地址495执行其查询工作,而没有执行虚拟到实际地址的转换工作。通过BTAC 402避免虚拟到实际地址的转换工作是有利的,因为比起有执行虚拟到实际地址转换工作的情形,它使假想分支能更快速地执行。
[0092]执行工作转换的操作系统,提供了虚拟别名化情形可能会发生的一个例子。在工作转换之后,处理器300会从指令高速缓存432提取位于关联新行程的虚拟提取地址495的指令,该关联新行程的虚拟提取地址495等同于关联旧行程的虚拟提取地址495,而旧行程则包括一分支指令,其目标地址快取于BTAC 402。指令高速缓存432会依据从虚拟提取地址495转换的实际地址来产生新行程的指令,如上文关于图5部分所描述的;然而,BTAC 402会只用虚拟提取地址495以产生旧行程的目标地址352,因而造成一错误的分支。有利的是,错误的假想分支只会在新行程的指令第一次执行时发生,此因在发现错误后,BTAC 402目标地址352将变为无效,如下文关于图10部分说明的。
[0093]因此,分支到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的查询工作是基于实际地址来执行的。Pentium II/III的方法,则因分支目标缓冲器134只在从指令高速缓存102提取分支指令以及指令译码逻辑132确定有一分支指令存在后,才产生一分支目标地址136。
[0094]此外,非假想目标地址计算器416、非假想调用/返回堆栈414以及非假想分支方向预测装置412也是非假想性的,此因它们只在从指令高速缓存432提取分支指令以及由指令译码逻辑436译码后,才产生分支预测,如下文将要说明的。
[0095]应该了解到,虽然非假想分支方向预测装置412所产生的方向预测444是“非假想性的”,即是在一分支指令已由指令译码逻辑436译码并确定该分支指令存在于现行指令流的情况下产生,非假想方向预测444仍是一“预测”。也就是,如果分支指令是条件分支指令,像是x86JCC指令,则在分支指令的任何既定的执行中,分支可能会进行,也可能不会。
[0096]相类似地,非假想目标地址计算器416所产生的目标地址354以及非假想调用/返回堆栈414所产生的返回地址355也是非假想性的,因为这些地址是在确定有一分支指令存在于现行指令流的情况下而产生;尽管如此,它们仍然是预测。例如,以通过内存进行的x86间接跳转而言,自前次执行间接跳转以来,内存内容可能已有改变。如此,目标地址可能随的改变。因此,在本说明书中,就分支方向而言,“非假想的”不能与“无条件的”相混淆;就目标地址而言,“非假想的”则不能与“确定的”(certain)相混淆。
[0097]无法确定一分支指令是否在提取地址495所检索的指令高速缓存432快取线中,其第二个理由是自我修改码(self-modifying code)的存在。自我修改码可能会改变指令高速缓存432的内容,但这改变并不会反映在BTAC 402中。因此,一先前包括分支指令的指令高速缓存432快取线可能命中了BTAC 402,但此分支指令已被修改或置换为不同的指令。
[0098]分支预测装置400亦包括假想调用/返回堆栈406。假想调用/返回堆栈406储存返回指令的假想目标地址。假想调用/返回堆栈406因应控制逻辑404产生的控制信号483,产生图3的假想返回地址353。假想返回地址353被送至多工器422的一输入。当多工器422选取了假想调用/返回堆栈406所产生的假想返回地址353,处理器300便分支至假想返回地址353。
[0099]当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快取线中。
[0100]BTAC 402响应提取地址495而产生命中信号452以及假想分支数据(SBI)454。命中信号452显示提取地址495命中了BTAC 402的一快取标志,此于下文关于图6的部分说明。SBI 454也会在下文关于图6部分作更详尽的说明。
[0101]SBI 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部分会更详细地说明。
[0102]分支预测装置400也包括控制逻辑404。控制逻辑404通过控制信号478控制多工器422,以选取数个地址输入之一,作为提取地址495。控制逻辑404也通过信号482设定指令缓冲器342中的SB位438。
[0103]控制逻辑404接收命中信号452、SBI 454、来自非假想分支方向预测装置412的非假想分支方向预测444以及来自指令缓冲器342的FULL信号486。
[0104]分支预测装置400亦包括预测检查逻辑408。预测检查逻辑408产生一ERR信号456,其被送至控制逻辑404,以指出已依据一BTAC402的命中而执行一错误的假想分支,如后文关于图10部分所描述的。预测检查逻辑408通过信号484从指令缓冲器342接收SB位438,信号484亦被送至控制逻辑404。预测检查逻辑408也从BTAC 402接收SBI 454。预测检查逻辑408也从指令译码逻辑436接收指令译码数据492。预测检查逻辑408也接收图3E-阶段326所产生的解析分支方向DIR 481。
[0105]预测检查逻辑408也接收比较器489的输出485。比较器489将BTAC 402产生的假想目标地址352与图3E-阶段产生的解析目标地址356作比较。BTAC 402产生的假想目标地址352被存于缓存器,并顺着指令流水线300而下至比较器489。
[0106]预测检查逻辑408也接收比较器497的输出487。比较器497将假想调用/返回堆栈406产生的假想返回地址353与解析目标地址356作比较。假想返回地址353被存于缓存器,并顺着指令流水线300而下至比较器497。
[0107]BTAC 402的假想目标地址352被存于缓存器,并顺着指令流水线300而下,由比较器428将其与非假想目标地址计算器416的目标地址354作比较。比较器428的输出476被送至控制逻辑404。相类似地,假想调用/返回堆栈406产生的假想返回地址353也被存于缓存器,并顺着指令流水线300而下,由比较器418将其与非假想返回地址355作比较。比较器418的输出474亦被送至控制逻辑404。
[0108]分支预测装置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作为输入。
[0109]多工器422亦接收S-阶段328的分支地址356作为其输入。多工器422也接收提取地址495本身作为输入。多工器422亦接收由递增装置426产生的下个循序提取地址499,递增装置426接收提取地址495,并递增其值至指令高速缓存432的下条循序快取线。
[0110]现请参照图6,其为依本发明绘示的图4BTAC 402的方块图。在图6所示的具体实施例中,BTAC 402包括一四路集合关联高速缓存。BTAC 402包括一数据数组612与一标志数组614。资料数组612包括储存组件的数组,以储存快取分支目标地址与假想分支数据的项目。标志数组614包括一储存组件的数组,以储存地址标志。
[0111]数据数组612与标志数组614各自皆配置成四路,图标为路0、路1、路2以及路3。最好(preferably)数据数组612的每一路储存两个快取分支目标地址与假想分支数据的项目,称为A与B。由此,每次读取资料数组612时,就会产生八个项目602。此八个项目602被送至一八对二路选择多工器(way select mux)606。
[0112]数据数组612与标志数组614皆由图4指令高速缓存432的提取地址495来作索引。提取地址495的较低有效位(significant bit)选定了数组612与614内各一条快取线。在一具体实施例中,每个数组包括了128条快取线。因此,BTAC 402能够快取多达1024个目标地址(128条快取线的每条具四个路,每路可储存两个目标地址)。最好(preferably)数组612与614是通过提取地址495的位[11:5]来作索引。
[0113]标志数组614为每路产生一标志616。最好(preferably)每个标志616包括虚拟地址的20个位,且四个标志616的每一个皆由比较器604将其与提取地址495的位[31:12]作比较。比较器604产生图4的命中信号452,其依据是否有一标志616与提取地址495的最高有效位相匹配,以指出是否有命中BTAC。命中信号452被送至图4的控制逻辑404。
[0114]此外,比较器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。
[0115]BTAC 402最好(preferably)是一单端口(single-ported)高速缓存。单端口高速缓存的优点是尺寸上比较小,因而比起双端口(dual-ported)高速缓存,在同样大小的空间中能够快取更多的目标地址。然而,双端口高速缓存的考虑是使同时地读写BTAC 402变得容易。双端口BTAC 402所具备的可同时读写的特征,由于更新写入的动作不需等待读取动作,使得BTAC 402的更新能更快速地进行。一般而言更快速的更新可得到更正确的预测,此因BTAC 402内的数据是更为现时的(current)。
[0116]在一具体实施例中,指令高速缓存432内每条快取线包括32个字节。然而,指令高速缓存432有时会提供指令字节的半快取线494。在一具体实施例中,BTAC 402的每条快取线储存了两个项目602,因而包括了两个目标地址714,用于指令高速缓存432的每条半快取线。
[0117]现请参阅图7,其为依本发明绘示图4BTAC 402的图6项目602的格式方块图。项目602包括了图4的SBI(假想分支数据)454与一分支目标地址(TA)714。SBI 454包括一VALID位702、图4的BEG 446与LEN 448、一CALL位704、一RET位706、一WRAP位708以及分支方向预测数据(BDPI)712。在图3的流水线300执行一分支后,该分支的解析目标地址即被快取于TA字段(field)714,而译码与执行分支指令所得的SBI 454则被快取于BTAC 402的项目602的SBI 454字段中。
[0118]VALID位702指出了项目602是否可用于将处理器300假想分支至关联的目标地址714。特别是,VALID位702最初是处于清除状态,此因BTAC 402由于未快取任何有效的目标地址而是空的。当处理器300执行一分支指令,且与该分支指令关联的解析目标地址与假想分支数据被快取于项目602时,VALID位702就被设定。之后,如果BTAC 402依据项目602作了错误的预测,VALID位702就被清除,如下文关于图10部分所述。
[0119]BEG字段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的分支指令。
[0120]LEN 448字段指出分支指令字节的长度。在侦测到一调用指令命中BTAC 402时,LEN 448字段被用来计算一返回地址,以储存于图4的假想调用/返回堆栈406。
[0121]CALL位704指出所快取的目标地址714是否关联到一调用指令。也就是,如果一调用指令由处理器300执行,且该调用指令的目标地址快取于项目602,则CALL位704将被设定。
[0122]RET位706指出所快取的目标地址714是否关联到一返回指令。也就是,如果一返回指令由处理器300执行,且该返回指令的目标地址快取于项目602,则RET位706将被设定。
[0123]WRAP位708在分支指令字节横跨两条指令高速缓存432的快取线时,会被设定。在一具体实施例中,WRAP位708在分支指令字节横跨两条指令高速缓存432的半快取线时,会被设定。
[0124]BDPI(分支方向预测数据)字段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位。
[0125]SELECT位724用来在下列两者中作一选择:BTAC 402 T/NT方向预测722与由BTAC 402的外的分支历史表(BHT)(见图12)所做的方向预测,如关于图12部分所述。在一具体实施例中,如果在分支执行后,所选定的预测装置(即,BTAC 402或BHT 1202)准确地预测了方向,SELECT位724就不会更新。然而,如果所选定的预测装置没有准确地预测方向而另一个预测装置正确地预测方向,SELECT位724就会更新,以指明是非选定的预测装置,而不是所选定的预测装置。
[0126]在一具体实施例中,SELECT位724包括一两位的上/下数饱和计数器,用以指定四种状态:极可能是BTAC(strongly BTAC)、有可能是BTAC(weakly BTAC)、有可能是BHT(weakly BHT)与极可能是BHT(strong BHT)。在此实施例中,如果在分支执行后,所选定的预测装置(即,BTAC 402或BHT 1202)准确地预测了方向,饱和计数器即朝所选定的预测装置来计数。如果所选定的预测装置没有准确地预测方向而另一个预测装置正确地预测方向,饱和计数器即朝非选定的预测装置来计数。
[0127]现请参照图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。
[0128]如果BTAC 402的命中并未发生,则在步骤822中控制逻辑404便不进行假想分支。也就是,控制逻辑404通过图4的控制信号478控制多工器422,以选取除了BTAC 402的目标地址352与假想调用/返同堆栈406的返回地址353外的一个输入。
[0129]然而,如果BTAC 402的命中确实发生,在步骤804中,控制逻辑404便会确定图6的A项目624是否有效,被看见(seen)与被采用(taken)。
[0130]若图7VALID位702被设定,控制逻辑404便确定项目624为“有效的”。如果VALID位702被设定,由提取地址495所选取的指令高速缓存432快取线就被假定为包括一分支指令,而该分支指令的分支预测数据则已先快取于A项目624;然而,如上文所讨论的,并不确定所选取的指令高速缓存432快取线包括有分支指令。
[0131]若项目A 624的T/NT字段722指出,所假定的分支指令方向预期会被采用,则控制逻辑404便确定项目624“被采用”(taken)。在下述图12的具体实施例中,若所选取的方向指示装置(directionindicator)指出,所假定的分支指令方向预期会被采用,则控制逻辑404便确定项目624“被采用”。
[0132]若图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是分支指令的目标地址时特别有关系。
[0133]若A项目624是有效的、预期会被采用且被看见,在步骤806中,控制逻辑404会检查图6的B项目626是否为有效、被看见与采用。控制逻辑404是以类似于步骤804对A项目624所用的方式,来决定B项目626是否为有效、被看见与采用。
[0134]若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。
[0135]在步骤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中。
[0136]若A项目624是无效的,或预期不被采用,或不被看见,如步骤804中所确定的,则控制逻辑404在步骤824中便会确定B项目626是否为有效、被看见与被采用。控制逻辑404是以类似于步骤804对A项目624所用的方式,来决定B项目626是否为有效、被看见与采用。
[0137]若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。
[0138]在步骤834或步骤818进行假想分支后,于步骤816中,控制逻辑404产生一指示于控制信号482中,表示已响应BTAC 402而执行一假想分支。
[0139]若A项目624与B项目626皆是无效的,预期不被采用,或不被看见,则在步骤822中,控制逻辑404便不会进行假想分支。
[0140]若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进行假想分支。
[0141]在一具体实施例中,假想调用/返回堆栈406并不存在。所以,步骤812、818与832皆未执行。
[0142]从图8可以看出,本发明有利地提供一装置,用以将多个分支指令的目标地址与假想分支数据快取于一分支目标地址高速缓存中一特定的指令快取线,而该分支目标地址高速缓存并未整合在指令高速缓存内。特别是,分支指令的位置数据快取于快取线内的BEG字段446,有利地使控制逻辑404无需前译码快取线,就能够从快取线内可能的多个分支指令中,决定要假想分支至哪一个。也就是,BTAC 402在虑及可能有两个或更多分支指令存在于所选取快取线的情况下,决定目标地址,而不用知道有多少分支指令(假若有的话)存在于快取线中。
[0143]现请参阅图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指令。
[0144]此范例也显示了提取地址495所选取的BTAC 402快取线内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。
[0145]项目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。
[0146]此外,BTAC 402将命中信号452设定为真,以显示提取地址495命中了BTAC 402。控制逻辑404接收项目A 602A与项目B 602B,并依照图8所述的方法,根据命中信号452、提取地址495的值以及602A与602B两个项目,产生图6的A/B选择信号622。
[0147]在步骤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。
[0148]于步骤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。
[0149]在步骤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。
[0150]因此,从图9的范例可以看出,图4的分支预测装置400有利地运作,以选取最先、有效、被看见、被采用的所选定BTAC 402快取线的项目602,将处理器300假想分支至其中关联的目标地址714。有利的是,即使有多个分支指令存在于对应的选定的指令高速缓存432快取线494,装置400仍能在不知快取线494内容的情况下,完成假想分支的动作。
[0151]现请参阅图10,其为依本发明绘示的图4假想分支预测装置400侦测与更正错误的假想分支预测的运作流程图。从指令缓冲器342接收一指令后,在步骤1002中,图4的指令译码逻辑436便译码该指令。尤其,指令译码逻辑436将指令字节流(stream of instruction bytes)格式化成一不同的x86巨指令,并确定该指令的长度以及是否为分支指令。
[0152]接着,在步骤1004中,图4的预测检查逻辑408测定所译码指令中,是否有任何指令字节的SB位438被设定。也就是,预测检查逻辑408测定是否先前已基于现行译码的指令命中BTAC 402,而执行一假想分支。若没有执行任何假想分支,则不会采取行动去更正。
[0153]若有执行一假想分支,则在步骤1012中,预测检查逻辑408会检查现行译码的指令,以确定该指令是否为非分支指令。最好(preferably)预测检查逻辑408会测定该指令是否为x86指令集的非分支指令。
[0154]如果该指令不是分支指令,则在步骤1022中,预测检查逻辑408将图4的ERR信号456设定为真,以表示侦测到一错误的假想分支。此外,通过图4的更新信号442,BTAC 402得以更新,而清除图6对应的BTAC 402项目602的图7VALID位702。再者,图3的指令缓冲器342会清除掉因此一错误的假想分支而从指令高速缓存432误取的指令。
[0155]如果该指令不是分支指令,则在步骤1024中,控制逻辑404接着控制图4的多工器422,以分支至指令译码逻辑436所产生的CIP468,更正该错误的假想分支。步骤1024中所进行的分支,将使得包括该指令的指令高速缓存432快取线重新被提取与作假想预测。然而,这次该指令的VALID位702将被清除;因此,该指令将不执行任何假想分支,用来更正先前错误的假想分支。
[0156]若在步骤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以更正错误的假想预测。
[0157]若在步骤1012中,预测检查逻辑408确定该指令为一有效的分支指令,且在步骤1014中,确定没有非运算码字节的SB位438被设定,则在步骤1016中,预测检查逻辑408会确定是否有假想与非假想指令长度上的不匹配。也就是,预测检查逻辑408将步骤1002中指令译码逻辑436产生的非假想指令的长度与BTAC 402产生的图7假想LEN 448字段作一比较。若指令长度不匹配,则执行步骤1022与1024以更正错误的假想预测。
[0158]若在步骤1012中,预测检查逻辑408确定该指令为一有效的分支指令,且在步骤1014中,确定只有运算码字节的SB位438被设定,以及在步骤1016确定指令长度匹配,则该指令便顺着流水线300而下,直至抵达图3的E-阶段326。在步骤1032中,E-阶段326解析出图3的正确的分支指令目标地址356,并确定图4的正确的分支方向DIR 481。
[0159]接着,在步骤1034中,预测检查逻辑408确定BTAC 402是否错误预测了分支指令的方向。也就是,预测检查逻辑408将E-阶段326所解析的正确方向DIR 481与BTAC 402产生的图7预测722作比较,以确定是否已执行一错误的假想分支。
[0160]若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分支至分支指令的下个指令,以更正该错误的假想分支。
[0161]若在步骤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。
[0162]若在步骤1036侦测到一目标地址的错误,则在步骤1052中,预测检查逻辑408将ERR信号456设定为真,以显示侦测到一错误的假想分支。此外,控制逻辑404通过更新信号442,以步骤1032产生的解析目标地址356来更新图6对应的BTAC 402项目602。再者,会清除掉流水线300中因该错误的假想分支而从指令高速缓存432误取的指令。接着,在步骤1054中,控制逻辑404控制图4的多工器422,以分支至解析目标地址356,用来更正先前错误的假想分支。
[0163]现请参照图11,为依本发明列举的程序代码实例片段及一表格1100,为说明图10假想分支预测错误的侦测与更正的一范例。程序代码片段包括一先前程序代码片段与一现行程序代码片段。例如,该先前程序代码片段图标了在图3处理器300进行工作交换(task switch)前,图4指令高速缓存432中位于虚拟地址0x00000010的程序代码。该现行程序代码片段则图标了在工作交换后,指令高速缓存432中位于虚拟地址0x00000010的程序代码,就像在虚拟别名化情形所可能发生的。
[0164]该先前程序代码序列(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中。
[0165]现行程序代码序列包括一位于0x00000010的ADD(算术加)指令,与先前程序代码序列中的JMP指令的虚拟地址相同。现行程序代码序列中位置0x00001234是SUB(算术减)指令,位置0x00001236则是INC(算术递增)指令。
[0166]表格1100包括八行(column)与六列(row)。第一列之后七行代表七个脉冲周期(clock cycle),从1至7。第一行之后五列代表流水线300最先的五个阶段,即I-阶段302、B-阶段304、U-阶段306、V-阶段308与F-阶段312。表格1100的其它方格则显示当执行现行程序代码序列时,在不同脉冲周期中每个阶段的内容。
[0167]在脉冲周期1期间,BTAC 402与指令高速缓存432被存取。ADD指令显示于I-阶段302。图4值为0x00000010的提取地址495检索BTAC 402与指令高速缓存432,依据图8的流程决定是否需要进行一假想分支。在图11的范例中,一值为0x00000010的提取地址495会命中BTAC 402,如下所述。
[0168]在脉冲周期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来决定项目是有效、被采用、被看见且不是返回指令。
[0169]在脉冲周期3期间,ADD指令显示于U-阶段306。ADD指令由指令高速缓存432提供,并闩锁于U-阶段306。因为图8的步骤802至814是在脉冲周期2中执行,控制逻辑404便通过控制信号478控制图4的多工器422,以选取BTAC 402所提供的目标地址352。
[0170]在脉冲周期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指令被设定。
[0171]在脉冲周期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中已执行错误的假想分支。
[0172]在脉冲周期6期间,使错误的假想分支无效。依据步骤1022,指令缓冲器342被清空。尤其,ADD指令从指令缓冲器342中清除。此外,依据步骤1022,导致错误假想分支的项目602所关联的VALID位702则被清除,以更新BTAC 402。再者,控制逻辑404控制多工器422,以选取CIP 468作为下个周期的提取地址495。
[0173]在脉冲周期7期间,更正错误的假想分支。处理器300开始从指令高速缓存432提取位于ADD指令的指令指针的指令,该ADD指令是在脉冲周期5侦测到错误时,由指令译码逻辑436所译码的。也就是,处理器300依据步骤1024分支至对应于ADD指令的CIP 468,用来更正在脉冲周期5所执行的错误的假想分支。因此,ADD指令在脉冲周期7是显示于I-阶段302。这次,ADD指令将顺着流水线300而下并执行。
[0174]现请参阅图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。
[0175]全域分支历史缓存器1206包括一移位缓存器(shiftregister),对于处理器300所执行的所有分支指令,全域分支历史缓存器1206接收其分支指令方向结果(branch instruction directionoutcomes)1212,而该移位缓存器则储存分支指令方向结果1212的全域历史。每次处理器300执行一分支指令,图4的DIR位481就被写入移位缓存器1206,若分支方向被采用,该位值为“设定”;若分支方向不被采用,该位值为“清除”。由此,最早的(oldest)位就被移出移位缓存器1206。在一具体实施例中,移位缓存器1206储存了全域历史的13个位。全域分支历史的储存,在分支预测的技术领域中是为人熟知的,对于程序中高度依存于其它分支指令的分支指令,可改良其结果的预测。
[0176]全域分支历史1206通过信号1214送至异或逻辑1204,以与图4的提取地址495进行一逻辑的异或运算。异或逻辑1204的输出1216作为分支历史表1202的索引。在分支预测的技术领域中,异或逻辑1204所执行的功能一般都称为gshare运算。
[0177]分支历史表1202包括一储存组件的数组,以储存数个分支指令的分支方向结果的历史。该数组由异或逻辑1204的输出1216作为索引。当处理器300执行一分支指令,由异或逻辑1204的输出1216所检索的分支历史表1202的数组组件便通过信号1218选择性地加以更新,而信号1218的内容则视解析分支方向DIR 481而定。
[0178]在一具体实施例中,分支历史表1202数组中的每个储存组件包括两个方向预测:A与B方向预测。最好(preferably),如图所示,分支历史表1202产生A与B方向预测于T/NT_A/B 1222信号上,针对BTAC402产生的图6A项目624与B项目626各指定一方向预测以供选取。在一具体实施例中,分支历史表1202的储存组件数组包括4096个项目,每个可储存两个方向预测。
[0179]在一具体实施例中,A与B预测各包括单一T/NT(taken/nottaken,即采用/不采用)位。在此实施例中,该T/NT位更新为DIR位481的值。在另一具体实施例中,A与B预测各包括一两位的上/下数饱和计数器,指定了四种状态:极可能采用(strongly taken)、有可能采用(weakly taken)、有可能不采用(weakly not taken)与极可能不采用(strong not taken)。在此实施例中,饱和计数器朝DIR位481指出的方向来计数。
[0180]多工器1208从分支历史表1202接收两个方向预测位T/NT_A/B 1222,并从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所示。
[0181]可以看出,若处理器300分支至目标地址352,且该地址352是BTAC 402依据(至少部分是)分支历史表1202所提供的方向预测1222而产生,则该分支是以假想的方式进行。该分支是假想的,此因虽然命中BTAC 402已指出一分支指令先前存在于提取地址495所选取的指令高速缓存432快取线中,但仍无法确定一分支指令位于所选取的指令高速缓存432快取线中,如上所讨论的。
[0182]也可以看出,比起单单只有BTAC 402方向预测722,图12的混合分支方向预测装置1200可能有利地提供一更准确的分支方向预测。尤其,一般而言,对于高度依存于其它分支历史的分支而言,分支历史表1202提供了较准确的预测;反的,对于并非高度依存于其它分支历史的分支而言,则是BTAC 402提供了较准确的预测。就一既定的分支而言,通过SELECT位724能选择较准确的预测装置。因此,可以看出,图12的方向预测装置1200能有利地与BTAC 402协同运作,以使用BTAC 402所提供的目标地址352进行更准确的假想分支。
[0183]现请参阅图13,其为图4的双调用/返回堆栈406与414的运作流程图。计算机程序的一项特性是,可能从程序内多个位置来调用子程序(subroutine)。所以,子程序内一返回指令的返回地址可能变来变去。因此,可以看出,利用分支目标地址高速缓存去预测返回地址通常很不容易,从而调用/返回堆栈的出现,实有其必要。本发明的双调用/返回地址堆栈的架构提供了本发明的假想BTAC的好处,像是在流水线300早期即预测分支目标地址,以减少分支惩罚。除此之外,还广泛提供了调用/返回堆栈的优点,即,比一简单的BTAC 402更准确地预测返回地址。
[0184]在步骤1302中,图4的BTAC 402由图4的提取地址495作索引,而图4的控制逻辑404检查命中信号452,以确定提取地址495是否命中BTAC 402,还检查SBI 454的VALID位702,以确定所选取的BTAC402项目602是否有效。若BTAC 402的命中未发生或VALID位702未被设定,则控制逻辑404并不会使处理器300进行假想分支。
[0185]若在步骤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所述。
[0186]若Call位704被设定,则在步骤1308中,控制逻辑404接着控制多工器422去选取图3的BTAC 402目标地址352,以假想分支至目标地址352。
[0187]若控制逻辑404在步骤1304确定CALL位704未被设定,则在步骤1312中,控制逻辑404会检查SBI 454的图7RET位706,以确定所快取的分支指令假想地或大概地是否为一返回指令。若RET位706被设定,则在步骤1314中,控制逻辑404控制假想调用/返回堆栈406,以将图3的假想返回地址353从堆栈顶端取出。
[0188]在取出假想返回地址353后,则在步骤1316中,控制逻辑接着控制多工器422去选取从假想调用/返回堆栈406取出的假想返回地址353,以假想分支至返回地址353。
[0189]返回指令顺着流水线300而下,直至抵达图3的F-阶段312,图4的指令译码逻辑436则译码此假定的返回指令。若此假定的返回指令的确是一返回指令,则图4的非假想调用/返回堆栈414产生此返回指令的图3非假想返回地址355。在步骤1318中,图4的比较器418将假想返回地址353与非假想返回地址355作比较,并将结果714送至控制逻辑404。
[0190]在步骤1318中,控制逻辑404检查比较器418的结果474,以确定是否有不匹配发生。若假想返回地址353与非假想返回地址355不相匹配,则在步骤1326中,控制逻辑404会控制多工器422选取非假想返回地址355,以使处理器300分支至非假想返回地址355。
[0191]若控制逻辑404于步骤1304中确定CALL位704并未设定,且于步骤1312中确定RET位706也未设定,则在步骤1322中,控制逻辑404会控制多工器422假想分支至图3的BTAC 402目标地址352,如图8步骤814或834所描述的。
[0192]因此,从图13可看出,图4的双重调用/返回堆栈的运作可减少调用与返回指令的分支惩罚。这种分支惩罚的减少,是通过将处理器300结合BTAC 402,使调用与返回指令在流水线更早期就进行分支,同时也克服以下现象:由于子程序一般都从一些不同的程序位置来调用,返回指令因而会返回至多个不同的返回地址。
[0193]现请参照图14,为说明图4的分支预测装置400以非假想分支预测来选择性地覆盖(override)假想分支预测,用来改进本发明的分支预测准确度的运作流程图。在从指令缓冲器342接收一指令后,在步骤1402中,图4的指令译码逻辑436便译码该指令,图4的非假想目标地址计算器416、非假想调用/返回堆栈414以及非假想分支方向预测装置412则依图4的指令译码数据492产生非假想分支预测。指令译码逻辑436在步骤1402中,产生该指令的类型数据于指令译码数据492中。
[0194]尤其,指令译码逻辑436会确定该指令是否为分支指令、指令的长度以及分支指令的类型。最好(preferably)指令译码逻辑436会确定分支指令是否为条件或无条件类型分支指令、PC相关类型分支指令、返回指令、直接类型分支指令或间接类型分支指令。
[0195]若该指令为一分支指令,非假想分支方向预测装置412会产生图4的非假想方向预测444。此外,非假想目标地址计算器416则计算图3的非假想目标地址354。最后,若该指令为一返回指令,则非假想调用/返回堆栈414产生图3的非假想返回地址355。
[0196]在步骤1404中,控制逻辑404会确定分支指令是否为条件分支指令。也就是,控制逻辑404会确定该指令是否依靠一条件而被采用或不被采用,该条件像是旗标(flag)位是否设定,如零旗标(zero flag)、进位旗标(carry flag)等等。在x86指令集中,JCC指令是条件类型的分支指令。相对地,RET、CALL与JUMP指令,则是无条件分支指令,因为这些指令总会有一被采用的方向。
[0197]若该指令为条件类型的分支指令,则在步骤1412中,控制逻辑404会确定非假想分支方向预测装置412所预测的非假想方向预测444以及BTAC 402所预测SBI 454中图7的假想方向722两者间,是否不相匹配。
[0198]若有方向预测上的不匹配,则在步骤1414中,控制逻辑404会确定非假想方向预测444是否要被采用。若非假想方向预测444不被采用,则在步骤1414中,控制逻辑404会控制多工器422选取图4的NSIP466,以分支至现行分支指令后的指令。也就是,控制逻辑404选择性地覆盖假想的BTAC 402方向预测。假想方向预测722之所以被覆盖,是因非假想方向预测444一般比较准确。
[0199]若非假想方向预测444被采用,则在步骤1432中,控制逻辑404会控制多工器422分支至非假想目标地址354。同样地,假想方向预测722之所以被覆盖,是因非假想方向预测444一般比较准确。
[0200]若控制逻辑404于步骤1412确定并无方向预测上的不匹配,且已执行分支指令的假想分支(即,若SB位438被设定),则在步骤1428中,控制逻辑404会确定假想目标地址352与非假想目标地址354间是否不相匹配。若有一条件类型分支的目标地址的不匹配,则在步骤1432中,控制逻辑404会控制多工器422分支至非假想目标地址354。假想目标地址预测352会被覆盖,此因非假想目标地址预测354一般更为准确。若没有一条件类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。
[0201]若在步骤1404中,控制逻辑404确定该分支指令不是条件类型的分支,则于步骤1406控制逻辑404会确定该分支指令是否为返回指令。若该分支指令是返回指令,则在步骤1418中,控制逻辑404会确定假想调用/返回堆栈406产生的假想返回地址353与非假想调用/返回堆栈414产生的非假想返回地址355两者间,是否不相匹配。
[0202]若假想返回地址353与非假想返回地址355两者不相匹配,则在步骤1422中,控制逻辑404会控制多工器422分支至非假想返回地址355。也就是,控制逻辑404选择性地覆盖假想返回地址353。假想返回地址353之所以被覆盖,是因非假想返回地址355一般比较准确。若没有一直接类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。请注意步骤1418与1422分别对应到图13的步骤1324与1326。
[0203]若在步骤1406中,控制逻辑404确定该分支指令不是返回指令,则于步骤1408控制逻辑404会确定该分支指令是否为PC相关类型的分支指令。在x86指令集中,PC相关类型的分支指令所指定的带正负号的位移量会加上现行程序计数器的值,以计算目标地址。
[0204]在另一具体实施例中,控制逻辑404于步骤1408也会确定该分支指令是否为直接类型的分支指令。在x86指令集中,直接类型的分支指令于自身内即指定目标地址。直接类型的分支指令也被称为立即类型(immediate type)的分支指令,因为目标地址被指定于指令的立即字段(immediate field)。
[0205]若该分支指令为PC相关类型的分支指令,则在步骤1424中,控制逻辑404会确定假想目标地址352与非假想目标地址354间是否不相匹配。若有一PC相关类型分支的目标地址的不匹配,则在步骤1426中,控制逻辑404会控制多工器422分支至非假想目标地址354。假想目标地址预测352会被覆盖,此因非假想目标地址预测354对PC相关类型的分支而言一般更为准确。若没有一PC相关类型分支的目标地址的不匹配,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。
[0206]若在步骤1408中,控制逻辑404确定该分支指令不是PC相关类型的分支指令,则不会采取任何行动。也就是,允许进行假想分支,并接受错误更正的管制,如关于图10部分所述。在一具体实施例中,非假想目标地址计算器416在F-阶段312包括一相当小的分支目标缓冲器(branch target buffer,BTB),仅用来快取间接类型分支指令的分支目标地址,如前面关于图4部分所述。
[0207]可以看出,对间接类型的分支指令而言,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,侦测错误的假想分支。
[0208]现请参照图15,其为依本发明绘示的用来置换图4BTAC 402中目标地址的装置的方块图。为了简明起见,关于BTAC 402的多路关联性的数据,像是图6的多路与路多工器606,并未显示。图6BTAC 402的数据数组612显示其包括了一选定的BTAC 402快取线,其中具有项目A602A与项目B 602B,分别通过图6的信号624与626送至控制逻辑404。项目A 602A与项目B 602B各包括其相关的图7VALID位702。
[0209]该选定的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。
[0210]此置换装置也包括一多工器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。
[0211]当一分支指令执行且被采用,该分支指令的目标地址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
                    表一
[0212]表一为具有两个输入的真值表(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来指定。
[0213]若A项目602A与B项目602B皆无效,则控制逻辑404必须决定要置换哪一边。一种解决方式是总是写到某一边,如A。然而,这种解决方式会造成如下程序代码序列1所示的问题。
        0x00000010 JMP  0X00000014
        0x00000014 ADD  BX,1
        0x00000016 CALL 0x12345678
                程序代码序列1
[0214]在程序代码序列1中,此三个指令都位在相同的指令高速缓存432的快取线内,因为其指令指针地址除了较低的四个地址位外余皆相同;因此,JMP与CALL指令选取相同的BTAC 402快取线与路。假设此范例中,当指令执行时,由JMP与CALL指令所选取BTAC 402快取线与路内的A项目602A与B项目602B皆无效。使用“当两个项目皆无效时,总是更新A这一边”的解决方式,JMP指令将见到两边皆为无效,且将更新A项目602A。
[0215]然而,由于在程序序列中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而不必要地被取代。
[0216]为解决如表一所示的问题,若A项目602A与B项目602B皆无效,则控制逻辑404最好选取存于一全域置换状态旗标缓存器即LastWritten 1502的一边或其相反边。LastWritten缓存器1502包括于置换装置,并由其来更新。LastWritten缓存器1502储存一指示,其显示就BTAC 402整体而言,其A边或B边是否为最后被写到一无效的BTAC402项目602。有利地,此方法使用LastWritten缓存器1502以避免前面程序代码序列1所示的问题,如现在关于图16与17部分所要叙述的。
[0217]现请参照图16,其为依本发明图15装置的一运作方法的流程图。图16阐明了上述表一的一具体实施例。
[0218]当控制逻辑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置换掉。
[0219]若控制逻辑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。
[0220]若LastWritten缓存器1502显示BTAC 402的A边并非最后被写到一选定的快取线与路中,而在此选定的快取线与路中A项目602A与B项目602B皆为无效,则控制逻辑404于步骤1634将A项目602A置换掉。控制逻辑404接着于步骤1636更新LastWritten缓存器1502,以指定BTAC 402的A边为最后被写到一选定快取线与路的边,而在此选定的快取线与路中A项目602A与B项目602B皆为无效。
[0221]若LastWritten缓存器1502显示BTAC 402的B边并非最后被写到一选定的快取线与路中,而在此选定的快取线与路中A项目602A与B项目602B皆为无效,则控制逻辑404于步骤1644将B项目602B置换掉。控制逻辑404接着于步骤1646更新LastWritten缓存器1502,以指定BTAC 402的B边为最后被写到一选定快取线与路的边,而在此选定的快取线与路中A项目602A与B项目602B皆为无效。
[0222]可以看出,图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,供后续的假想分支使用。
[0223]现请参照图17,其为依本发明的另一具体实施例绘示图15装置的一运作方法的流程图。图17的步骤除了两个额外步骤外,其余皆与图16的步骤相同。在此另一具体实施例中,控制逻辑404在置换一无效的项目后,会更新LastWritten缓存器1502,即使另一项目为有效的。
[0224]因此,在图17,于步骤1614置换了B项目602B后,在步骤1716中,控制逻辑404将更新LastWritten缓存器1502以指定B边。此外,于步骤1624置换了A项目602A后,在步骤1726中,控制逻辑404将更新LastWritten缓存器1502以指定A边。
[0225]虽然实际的仿真并未看到图16与17的实施例在效能上有显著差别,但可看出图16实施例解决了图17实施例所无法处理的一个问题。此问题以下述程序代码序列2来解说。
        0x00000010 JMP 0x12345678
        0x12345678 JMP 0x00000014
        0x00000014 JMP 0x20000000
                程序代码序列2
[0226]位于指令指针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快取线中选取相同的路。
[0227]依据图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的目标地址保持不变。
[0228]现请参照图18,其为依本发明的另一具体实施例绘示的用以进行图4BTAC 402中目标地址置换动作的装置方块图。图18的实施例类似于图15的实施例。然而,在图18的实施例中,A/B LRU位1504与两个项目的T/NT位722,显示为T/NT A 722A与T/NT B 722B,储存于一另外的数组1812,而非数据数组612。
[0229]此额外的数组1812是双端口的;而数据数组612却是单端口。因为A/B LRU位1504与T/NT位722比起项目602的其它字段更常被更新,对较常被更新的字段提供双端口的存取,可减低在高存取量期间于BTAC 402形成瓶颈的可能性。然而,由于双端口的高速缓存数组比单端口的高速缓存数组来得大,且消耗更多功率,较少被存取的字段就储存在单端口的资料数组612。
[0230]现请参照图19,其为依本发明的另一具体实施例绘示的用以进行图4BTAC 402中目标地址置换动作的装置方块图。图19的实施例类似于图15的实施例。然而,图19的实施例中,每一BTAC 402快取线与路皆包括一第三项目,项目C 602C。项目C 602C通过信号1928送至控制逻辑404。有利地,图19的实施例支持假想分支至三个分支指令中任一个的能力,而此三个分支指令快取由提取地址495所选取的一对应的指令高速缓存432快取线中;或者,在一实施例中,支持假想分支至快取于一对应的指令高速缓存432半快取线的三个分支指令中的任一个。
[0231]除此之外,图19的实施例不使用LastWritten缓存器1502,取而代之的是一缓存器1902,其包括一LastWritten值与一LastWrittenPrev值。当LastWritten值要更新时,控制逻辑404在更新LastWritten值之前,便将LastWritten值的内容复制到LastWrittenPrev值。LastWritten值与LastWrittenPrev值这两个值一起使得控制逻辑404得以确定三个项目中哪一个是最近最少被写到的,如现在于表二及其后的等式所描述的。
[0232]表二类似于表一,除了表二有三个输入,包括项目C 602C的附加的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))
[0233]虽然本发明及其目的、特征与优点已详细叙述了,其它具体实施例仍涵盖在本发明的范围内。例如,BTAC可用任何数量的高速缓存来配置,包括直接映像(direct-mapped)、完全关联(fully associative)或不同数目的路高速缓存。再者,BTAC的大小可增或减。而且,一提取地址,而不是位于实际包括被预测分支指令的快取线的提取地址,可用来检索BTAC与分支历史表。例如,先前提取指令的提取地址可用来在分支前减低指令泡沫的大小。此外,储存于高速缓存的每一路的目标地址数量可能改变。另外,分支历史表的大小可能改变,且存于其中的位的数目与方向预测数据的形式,以及检索分支历史表的算法(algorithm)也可能改变。再者,指令高速缓存的大小可能改变,且用以检索指令高速缓存与BTAC的虚拟提取地址的类型也可能改变。
总之,以上所述仅为本发明的较佳实施例而已,当不能限定本发明所实施的范围。凡是依本发明权利要求所作的等效变化与修饰,皆应仍属于本发明专利涵盖的范围内。

Claims (45)

1.一种用于一微处理器内的分支装置,该装置利用一提取地址选取一指令高速缓存中的一快取线,该装置亦使用该提取地址来假想预测一分支指令是否将被采用,该分支指令可能潜在地(potentially)存在于该指令快取线中,其特征在于,该装置包括:
一第一预测装置,对应至该提取地址,依据该提取地址预测该分支指令是否将被采用;
一逻辑,对应至该提取地址,提供该提取地址与一全域分支历史的一二进制函数于该逻辑的一输出端;
一第二预测装置,对应至该逻辑的输出端,依据该输出预测该分支指令是否将被采用;
一选择器,对应至该提取地址,依据该提取地址选取该第一与第二预测装置其中之一。
2.如权利要求1所述的装置,其特征在于,该二进制函数包括至少一部份该提取地址与该全域分支历史的一异或运算。
3.如权利要求1所述的装置,其特征在于,该第一预测装置由该提取地址所检索的一分支目标地址高速缓存所提供。
4.如权利要求1所述的装置,其特征在于,该第二预测装置由提取地址与该全域分支历史的该二进制函数所检索的一分支历史表所提供。
5.如权利要求1所述的装置,其特征在于,该选择器由该提取地址所检索的一分支目标地址高速缓存所提供。
6.如权利要求1所述的装置,其特征在于,该选择器包括一位,用以在该第一与第二预测间做选择。
7.如权利要求1所述的装置,其特征在于,每一该第一与第二预测装置包括数个预测该分支指令是否将被采用的预测器,其中该选择器包括数个对应于该数个预测器的位,用以在所对应的该数个第一与第二预测器间做选择。
8.如权利要求1所述的装置,其特征在于,该选择器包括一饱和上/下数计数器。
9.如权利要求8所述的装置,其特征在于,该饱和上/下数计数器从下列情形的一储存一选取值(selection value):极可能是第一预测装置(strongly first predictor)、有可能是第一预测装置(weakly firstpredictor)、有可能是第二预测装置(weakly second predictor)以及极可能是第二预测装置(strongly second predictor)。
10.如权利要求1所述的装置,其特征在于,还包括:
一缓存器,对应至该第二预测装置,储存该全域分支历史。
11.如权利要求10所述的装置,其特征在于,该缓存器包括一N位移位缓存器,以储存微处理器所执行的分支指令是否被采用的N个先前结果。
12.一种假想分支预测装置,位在具有一指令高速缓存的一流水线化微处理器中,该指令高速缓存接收一地址总线上的一提取地址,以选取该指令高速缓存的一快取线,一分支指令被假定存在于该快取线中,其特征在于,该装置包括:
一假想分支历史表(BHT),提供该分支指令的一第一方向预测;
一分支目标地址高速缓存(BTAC),对应至该地址总线,提供该分支指令的一第二方向预测,并提供一选择预测,用以在该第一与第二方向预测间作选择;以及
一多工器,对应至该BHT与该BTAC,依据该选择预测选取该第一与第二方向预测其中之一;
其中该第二方向预测系响应该提取地址而提供,即使该分支指令可能并不存在于该指令快取线中。
13.如权利要求12所述的装置,其特征在于,还包括:
一全域分支历史缓存器,对应至该BHT,储存微处理器先前所执行数个分支指令的方向的一全域历史。
14.如权利要求13所述的装置,其特征在于,BHT响应该指令高速缓存提取地址与存于该全域分支历史缓存器的全域历史的一函数,而提供该第一方向预测。
15.如权利要求14所述的装置,其特征在于,该函数包括存于该全域分支历史缓存器的全域历史与一部份该指令高速缓存提取地址的一逻辑的异或运算。
16.如权利要求14所述的装置,其特征在于,BHT包括一具数个储存组件的数组,以储存数个方向预测,其中该数组由指令高速缓存提取地址与该全域历史的该函数作索引。
17.如权利要求16所述的装置,其特征在于,每一该些储存组件被组态为储存数个方向预测,以供选取作为该第一方向预测。
18.如权利要求12所述的装置,其特征在于,该第一方向预测、该第二方向预测以及该选择预测的每一个皆包括数个预测。
19.如权利要求18所述的装置,其特征在于,该多工器为每一该第一与第二方向预测选取该数个预测之一,以响应一对应的其中一该数个选择预测。
20.在如权利要求19所述的装置,其特征在于,还包括:
一控制逻辑,对应至该多工器,从该多工器接收每一该第一与第二方向预测的所选取的其中一该数个预测,该控制逻辑组态为依据所选取的其中一该数个预测,使微处理器选择性地进行假想分支或不分支。
21.如权利要求20所述的装置,其特征在于,该控制逻辑被组态为使微处理器选择性地假想分支至该BTAC响应提取地址所提供的一假想分支目标地址。
22.一种用在一微处理器中的假想分支目标地址高速缓存(BTAC),其特征在于,该BTAC包括:
一数组,组态为储存数个分支指令的方向预测;
一输入,对应至该数组,组态为接收一指令高速缓存的提取地址,该提取地址检索该数组,以选取该数个方向预测其中之一;以及
一输出,对应至该数组,提供所选取的方向预测至一分支控制逻辑;
其中若所选取的方向预测指定一采用方向,则不管是否有一分支指令存在于该提取地址所检索的指令高速缓存的一快取线中,该分支控制逻辑皆使微处理器进行假想分支。
23.一种用于假想分支的微处理器,其特征在于,包括:
一指令高速缓存,提供一地址总线上的一提取地址所选取的一指令字节线;
一假想分支历史表(BHT),对应至该地址总线,提供一分支指令是否将被采用的一第一预测,该分支指令被假定存在于该指令快取线,该第一预测系依据该提取地址与一全域分支历史的一组合而提供;
一假想分支目标地址高速缓存(BTAC),对应至该地址总线,提供该假定的分支指令的一第二预测,并提供一选择器;以及
一控制逻辑,对应至该BHT与BTAC,若该选择器所选取的该第一与第二预测其中之一预测该假定的分支指令将被采用,则该控制逻辑使微处理器进行假想分支。
24.如权利要求23所述的微处理器,其特征在于,该控制逻辑使微处理器假想分支至BTAC依据该提取地址而提供的一假想分支目标地址。
25.如权利要求23所述的微处理器,其特征在于,还包括:
一假想调用/返回堆栈,对应至BTAC,储存数个假想返回地址;
其中该控制逻辑使微处理器假想分支至该假想调用/返回堆栈依据该提取地址而提供的其中一该数个假想返回地址。
26.如权利要求25所述的微处理器,其特征在于,BTAC被组态为提供一指示,以指出该假定的分支指令是否为返回指令。
27.如权利要求26所述的微处理器,其特征在于,只有在该指示指出该假定的分支指令是返回指令时,该控制逻辑才使微处理器假想分支至该假想调用/返回堆栈所提供的假想返回地址。
28.如权利要求27所述的微处理器,其特征在于,BTAC被组态为提供一指示,以指出该假定的分支指令是否为调用指令。
29.如权利要求28所述的微处理器,其特征在于,若该指示指出该假定的分支指令是调用指令,则该控制逻辑使该假想调用/返回堆栈所提供的假想返回地址被推入该假想调用/返回堆栈中。
30.如权利要求23所述的微处理器,其特征在于,该选择器系响应该假定分支指令是否会被采用的一解析方向而更新。
31.如权利要求30所述的微处理器,其特征在于,若该第一与第二预测中一被选取的预测是不正确的,且若该第一与第二预测中一未被选取的预测是正确的,则该选择器系响应该解析方向而更新。
32.如权利要求31所述的微处理器,其特征在于,该选择器系通过切换(toggling)该选择器而更新。
33.如权利要求31所述的微处理器,其特征在于,该选择器系通过使选择器朝该未被选取的预测计数而更新。
34.如权利要求23所述的微处理器,其特征在于,该BHT包括一具数个储存组件的数组,用来为数个分支指令的每一个储存一分支历史。
35.如权利要求34所述的微处理器,其特征在于,为该数个分支指令的每一个所储存的该分支历史包括一被采用/不被采用(taken/nottaken)位。
36.如权利要求34所述的微处理器,其特征在于,为该数个分支指令的每一个所储存的该分支历史包括一饱和上/下数计数器。
37.一种在一微处理器中进行假想分支的方法,其特征在于,该方法包括:
产生一指令的数个假想分支方向预测;
选取该数个假想分支方向预测的一作为一最后方向预测;以及
若该最后方向预测指出该指令将被采用,则使微处理器进行假想分支;
其中该产生、选取以及假想分支的动作皆在译码该指令之前执行。
38.如权利要求37所述的方法,其特征在于,还包括:
在该假想分支的动作之后,侦测该最后方向错误地指出该指令将被采用。
39.如权利要求38所述的方法,其特征在于,还包括:
因应该侦测动作,分支至一正确目标地址。
40.一种在一微处理器中进行假想分支的方法,其特征在于,该方法包括:
产生一分支指令是否将被采用的第一与第二预测,以响应于一指令高速缓存提取地址的第一与第二二进制函数;
选取该第一与第二预测其中之一作为一最后预测,该选取的动作系响应该提取地址的一第三二进制函数而执行;以及
若该最后预测指出该分支指令将被采用,则微处理器进行假想分支
其中不论该分支指令是否存在于该提取地址所选取的一指令快取线中,该产生、选取以及假想分支的动作皆被执行。
41.如权利要求40所述的方法,其特征在于,该第一与第二函数系不同的函数。
42.如权利要求40所述的方法,其特征在于,该第二二进制函数包括该提取地址与一全域分支历史的一二进制函数。
43.如权利要求42所述的方法,其特征在于,该第二二进制函数包括至少一部分该提取地址与该全域分支历史的一异或运算。
44.如权利要求40所述的方法,其特征在于,该第一与第三二进制函数系相同的函数。
45.如权利要求44所述的方法,其特征在于,该第一与第三二进制函数包括一预先决定(predetermined)数量的该提取地址的最低有效位。
CNB021185549A 2001-05-04 2002-04-27 假想混合分支方向预测装置和方法 Expired - Lifetime CN1260645C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/849,734 US6886093B2 (en) 2001-05-04 2001-05-04 Speculative hybrid branch direction predictor
US09/849,734 2001-05-04

Publications (2)

Publication Number Publication Date
CN1397878A true CN1397878A (zh) 2003-02-19
CN1260645C CN1260645C (zh) 2006-06-21

Family

ID=25306389

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021185549A Expired - Lifetime CN1260645C (zh) 2001-05-04 2002-04-27 假想混合分支方向预测装置和方法

Country Status (3)

Country Link
US (2) US6886093B2 (zh)
CN (1) CN1260645C (zh)
TW (1) TWI225214B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1295598C (zh) * 2004-03-09 2007-01-17 中国人民解放军国防科学技术大学 双栈返回地址预测器中返回地址栈的恢复方法
CN101495962B (zh) * 2006-08-02 2012-11-28 高通股份有限公司 用于预取不连续指令地址的方法和设备
WO2014032610A1 (zh) * 2012-09-03 2014-03-06 东南大学 一种面向cpu流水线的错误恢复电路
CN106406823A (zh) * 2016-10-10 2017-02-15 上海兆芯集成电路有限公司 分支预测器和用于操作分支预测器的方法
CN114237382A (zh) * 2017-02-24 2022-03-25 英特尔公司 基于使用参数配置处理器的基本时钟频率

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US6895498B2 (en) * 2001-05-04 2005-05-17 Ip-First, Llc Apparatus and method for target address replacement in speculative branch target address cache
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
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
US7234045B2 (en) * 2001-07-03 2007-06-19 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
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
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
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
US7185186B2 (en) * 2003-01-14 2007-02-27 Ip-First, Llc Apparatus and method for resolving deadlock fetch conditions involving branch target address cache
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
US20050273559A1 (en) * 2004-05-19 2005-12-08 Aris Aristodemou Microprocessor architecture including unified cache debug unit
US7328332B2 (en) * 2004-08-30 2008-02-05 Texas Instruments Incorporated Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US20070061554A1 (en) * 2005-09-09 2007-03-15 Lsi Logic Corporation Branch predictor for a processor and method of predicting a conditional branch
US8212823B2 (en) * 2005-09-28 2012-07-03 Synopsys, Inc. Systems and methods for accelerating sub-pixel interpolation in video processing applications
US20080040576A1 (en) 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
US7984279B2 (en) * 2006-11-03 2011-07-19 Qualcomm Incorporated System and method for using a working global history register
JP2008299795A (ja) * 2007-06-04 2008-12-11 Nec Electronics Corp 分岐予測制御装置及びその方法
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US8601234B2 (en) * 2007-11-07 2013-12-03 Qualcomm Incorporated Configurable translation lookaside buffer
US9021240B2 (en) * 2008-02-22 2015-04-28 International Business Machines Corporation System and method for Controlling restarting of instruction fetching using speculative address computations
US8131974B2 (en) * 2008-04-18 2012-03-06 International Business Machines Corporation Access speculation predictor implemented via idle command processing resources
US8122222B2 (en) * 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on a scope predictor
US8127106B2 (en) * 2008-04-18 2012-02-28 International Business Machines Corporation Access speculation predictor with predictions based on a domain indicator of a cache line
US8122223B2 (en) * 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on memory region prior requestor tag information
CN101763248A (zh) 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 用于多模式分支预测器的系统和方法
CN101807145B (zh) * 2010-04-16 2012-12-26 浙江大学 栈式分支预测器的硬件实现方法
US9396117B2 (en) 2012-01-09 2016-07-19 Nvidia Corporation Instruction cache power reduction
US9547358B2 (en) 2012-04-27 2017-01-17 Nvidia Corporation Branch prediction power reduction
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9262169B2 (en) * 2012-06-11 2016-02-16 International Business Machines Corporation Branch prediction table install source tracking
US9146739B2 (en) 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
US9348599B2 (en) 2013-01-15 2016-05-24 International Business Machines Corporation Confidence threshold-based opposing branch path execution for branch prediction
WO2014189510A1 (en) * 2013-05-23 2014-11-27 Intel Corporation Techniques for detecting return-oriented programming
US9582285B2 (en) * 2014-03-24 2017-02-28 Qualcomm Incorporated Speculative history forwarding in overriding branch predictors, and related circuits, methods, and computer-readable media
US10209992B2 (en) 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register
US9940262B2 (en) * 2014-09-19 2018-04-10 Apple Inc. Immediate branch recode that handles aliasing
US10162660B2 (en) * 2015-12-03 2018-12-25 International Business Machines Corporation Application-level processor parameter management
US10176104B2 (en) * 2016-09-30 2019-01-08 Arm Limited Instruction predecoding
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10649782B2 (en) * 2018-03-29 2020-05-12 Arm Limited Apparatus and method for controlling branch prediction
US11360774B2 (en) * 2020-10-23 2022-06-14 Centaur Technology, Inc. Dual branch format
US11461103B2 (en) * 2020-10-23 2022-10-04 Centaur Technology, Inc. Dual branch execute and table update with single port
US11113067B1 (en) * 2020-11-17 2021-09-07 Centaur Technology, Inc. Speculative branch pattern update
CN114090077B (zh) * 2021-11-24 2023-01-31 海光信息技术股份有限公司 调取指令的方法及装置、处理装置及存储介质

Family Cites Families (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
JPH0820950B2 (ja) * 1990-10-09 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチ予測型分岐予測機構
WO1992006426A1 (en) * 1990-10-09 1992-04-16 Nexgen Microsystems Method and apparatus for parallel decoding of instructions with branch prediction look-up
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
EP0628184B1 (en) 1992-02-27 1998-10-28 Samsung Electronics Co., Ltd. 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
ATE184407T1 (de) * 1994-01-03 1999-09-15 Intel Corp Verfahren und vorrichtung zum implementieren eines vierstufigen verzweigungsauflosungssystem in einem rechnerprozessor
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
US5732243A (en) * 1994-10-18 1998-03-24 Cyrix Corporation Branch processing unit with target cache using low/high banking to support split prefetching
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
JP3297249B2 (ja) * 1995-05-26 2002-07-02 三菱電機株式会社 分散型リモートi/o式制御システムの制御方法
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
US5802602A (en) * 1997-01-17 1998-09-01 Intel Corporation Method and apparatus for performing reads of related data from a set-associative cache memory
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
US6154833A (en) * 1997-08-11 2000-11-28 Intel Corporation System for recovering from a concurrent branch target buffer read with a write allocation by invalidating and then reinstating the instruction pointer
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
US6374349B2 (en) * 1998-03-19 2002-04-16 Mcfarling Scott Branch predictor with serially connected predictor stages for improving branch prediction accuracy
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
US6418525B1 (en) * 1999-01-29 2002-07-09 International Business Machines Corporation Method and apparatus for reducing latency in set-associative caches using set prediction
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
US6888699B2 (en) * 2000-08-23 2005-05-03 Seagate Technology Llc Disc drive clamp having centering features
US6754808B1 (en) * 2000-09-29 2004-06-22 Intel Corporation Valid bit generation and tracking in a pipelined processor
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
US7165168B2 (en) * 2003-01-14 2007-01-16 Ip-First, Llc Microprocessor with branch target address cache update queue
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
US7024545B1 (en) * 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
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
US7058795B2 (en) * 2002-06-25 2006-06-06 Intel Corporation Method and apparatus of branch prediction
US6968444B1 (en) * 2002-11-04 2005-11-22 Advanced Micro Devices, Inc. Microprocessor employing a fixed position dispatch unit
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
US7185186B2 (en) * 2003-01-14 2007-02-27 Ip-First, Llc Apparatus and method for resolving deadlock fetch conditions involving branch target address cache
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
US20060218385A1 (en) * 2005-03-23 2006-09-28 Smith Rodney W Branch target address cache storing two or more branch target addresses per index

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1295598C (zh) * 2004-03-09 2007-01-17 中国人民解放军国防科学技术大学 双栈返回地址预测器中返回地址栈的恢复方法
CN101495962B (zh) * 2006-08-02 2012-11-28 高通股份有限公司 用于预取不连续指令地址的方法和设备
WO2014032610A1 (zh) * 2012-09-03 2014-03-06 东南大学 一种面向cpu流水线的错误恢复电路
US9600382B2 (en) 2012-09-03 2017-03-21 Southeast University Error recovery circuit oriented to CPU pipeline
CN106406823A (zh) * 2016-10-10 2017-02-15 上海兆芯集成电路有限公司 分支预测器和用于操作分支预测器的方法
CN106406823B (zh) * 2016-10-10 2019-07-05 上海兆芯集成电路有限公司 分支预测器和用于操作分支预测器的方法
CN114237382A (zh) * 2017-02-24 2022-03-25 英特尔公司 基于使用参数配置处理器的基本时钟频率
CN114237382B (zh) * 2017-02-24 2024-03-22 英特尔公司 基于使用参数配置处理器的基本时钟频率

Also Published As

Publication number Publication date
US20020194463A1 (en) 2002-12-19
US6886093B2 (en) 2005-04-26
CN1260645C (zh) 2006-06-21
US20050132175A1 (en) 2005-06-16
TWI225214B (en) 2004-12-11

Similar Documents

Publication Publication Date Title
CN1260645C (zh) 假想混合分支方向预测装置和方法
CN1217262C (zh) 假想分支目标地址高速缓存中置换目标地址的装置及方法
CN1220938C (zh) 双调用/返回堆栈分支预测系统
CN1260646C (zh) 附有第二预测装置的假想分支目标地址高速缓存
CN1257452C (zh) 假想分支目标地址高速缓存分支的装置、系统及方法
CN1217271C (zh) 假想分支目标地址高速缓存
CN1269030C (zh) 高速缓存的快取线选取目标地址的装置及方法
CN1303536C (zh) 执行自高速缓存的快速推测式加载运算的微处理器及方法
CN1632877A (zh) 可变延滞时间堆栈快取存储器及提供资料的方法
CN1641607A (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
CN1153155C (zh) 装有高效利用主处理器中的寄存器数据的协处理器的信息处理装置
CN1202470C (zh) 处理器
CN1916962A (zh) 存储和回存状态上下文在图形处理单元的方法和装置
CN1107983A (zh) 一种数据处理系统及其方法
CN1625731A (zh) 具有多种长度指令集体系结构的可配置数据处理器
CN1916961A (zh) 可中断图形处理单元及其控制方法
CN1629801A (zh) 产生早期指令结果的管线式微处理器、装置以及方法
CN1641567A (zh) 自堆栈快取存储器进行快速推测性弹出操作方法及装置
CN1269052C (zh) 支持缩小代码长度的常量还原型处理器
CN1137421C (zh) 可编程控制器
CN1016383B (zh) 基于操作数长度和对位的微码转移
CN1114153C (zh) 支持程序编码长度减小的微处理器
CN1993673A (zh) 数据处理装置、数据处理程序及记录了数据处理程序的记录介质
CN1491383A (zh) 使用协处理器的数据处理
CN1152300C (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
CX01 Expiry of patent term

Granted publication date: 20060621